From e7a245e2110934223d2306c3e7c6e2f02571b4c3 Mon Sep 17 00:00:00 2001 From: Hao Yao Date: Thu, 22 Jan 2026 17:32:58 +0800 Subject: [PATCH] Release for CCG kernel v6.17.7 on 2026-01-22 Signed-off-by: Hao Yao --- CMakeLists.txt | 28 +- README.md | 4 +- .../ipu75xa/gcss/IMX471_BBG803N3.IPU75XA.bin | Bin 219360 -> 227784 bytes config/linux/ipu75xa/libcamhal_configs.json | 12 +- config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin | Bin 0 -> 384032 bytes .../linux/ipu8/gcss/OV13B10_09B13_2M.IPU8.bin | Bin 0 -> 243840 bytes config/linux/ipu8/libcamhal_configs.json | 29 + config/linux/ipu8/ov13b10.aiqb | Bin 0 -> 372285 bytes .../linux/ipu8/pipe_scheduler_profiles.json | 48 + config/linux/ipu8/pnp_profiles.json | 37 + config/linux/ipu8/sensors/ov13b10-uf.json | 288 + config/linux/ipu8/sensors/ov13b10-wf.json | 315 + modules/CMakeLists.txt | 6 +- .../ipu75xa/FragmentsConfigurator.cpp | 20 +- .../GraphResolutionConfiguratorInclude.h | 4 - ...75xaGraphResolutionConfiguratorAutogen.cpp | 2 +- ...pu75xaGraphResolutionConfiguratorAutogen.h | 2 +- .../ipu75xa/Ipu75xaStaticGraphAutogen.cpp | 349 +- .../ipu75xa/Ipu75xaStaticGraphAutogen.h | 58 +- .../ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h | 3 +- .../Ipu75xaStaticGraphDataPreloadAutogen.c | 2 +- .../Ipu75xaStaticGraphDataPreloadAutogen.h | 9 +- .../Ipu75xaStaticGraphReaderAutogen.cpp | 13 +- .../ipu75xa/Ipu75xaStaticGraphReaderAutogen.h | 2 +- .../ipu75xa/Ipu75xaStaticGraphTypesAutogen.h | 2 +- .../Ipu75xaTerminalDescriptorAutogen.cpp | 6 +- .../Ipu75xaTerminalDescriptorAutogen.h | 2 +- .../ipu_desc/ipu7x/FragmentsConfigurator.cpp | 20 +- .../GraphResolutionConfiguratorInclude.h | 4 - ...pu7xGraphResolutionConfiguratorAutogen.cpp | 9 +- .../Ipu7xGraphResolutionConfiguratorAutogen.h | 2 +- .../ipu7x/Ipu7xStaticGraphAutogen.cpp | 1270 +- .../ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h | 224 +- .../ipu7x/Ipu7xStaticGraphBinaryAutogen.h | 2 +- .../Ipu7xStaticGraphDataPreloadAutogen.c | 2 +- .../Ipu7xStaticGraphDataPreloadAutogen.h | 9 +- .../ipu7x/Ipu7xStaticGraphReaderAutogen.cpp | 35 +- .../ipu7x/Ipu7xStaticGraphReaderAutogen.h | 2 +- .../ipu7x/Ipu7xStaticGraphTypesAutogen.h | 7 +- .../ipu7x/Ipu7xTerminalDescriptorAutogen.cpp | 66 +- .../ipu7x/Ipu7xTerminalDescriptorAutogen.h | 20 +- modules/ipu_desc/ipu8/CBLayoutUtils.cpp | 204 + modules/ipu_desc/ipu8/CBLayoutUtils.h | 61 + .../ipu_desc/ipu8/FragmentsConfigurator.cpp | 969 + modules/ipu_desc/ipu8/FragmentsConfigurator.h | 69 + .../ipu8/GraphResolutionConfigurator.cpp | 2018 + .../ipu8/GraphResolutionConfigurator.h | 243 + .../GraphResolutionConfiguratorAutogen.cpp | 131 + .../ipu8/GraphResolutionConfiguratorAutogen.h | 33 + .../ipu8/GraphResolutionConfiguratorInclude.h | 46 + ...Ipu8GraphResolutionConfiguratorAutogen.cpp | 286 + .../Ipu8GraphResolutionConfiguratorAutogen.h | 46 + .../ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp | 76723 ++++++++++++++++ .../ipu_desc/ipu8/Ipu8StaticGraphAutogen.h | 9306 ++ .../ipu8/Ipu8StaticGraphBinaryAutogen.h | 104 + .../ipu8/Ipu8StaticGraphDataPreloadAutogen.c | 183 + .../ipu8/Ipu8StaticGraphDataPreloadAutogen.h | 446 + .../ipu8/Ipu8StaticGraphReaderAutogen.cpp | 1595 + .../ipu8/Ipu8StaticGraphReaderAutogen.h | 96 + .../ipu8/Ipu8StaticGraphTypesAutogen.h | 487 + .../ipu8/Ipu8TerminalDescriptorAutogen.cpp | 581 + .../ipu8/Ipu8TerminalDescriptorAutogen.h | 171 + modules/ipu_desc/ipu8/StaticGraphAutogen.cpp | 59503 ++++++++++++ modules/ipu_desc/ipu8/StaticGraphAutogen.h | 5750 ++ .../ipu_desc/ipu8/StaticGraphBinaryAutogen.h | 86 + .../ipu8/StaticGraphReaderAutogen.cpp | 1295 + .../ipu_desc/ipu8/StaticGraphReaderAutogen.h | 75 + .../ipu_desc/ipu8/StaticGraphTypesAutogen.h | 437 + .../ipu8/TerminalDescriptorAutogen.cpp | 379 + .../ipu_desc/ipu8/TerminalDescriptorAutogen.h | 150 + modules/ipu_desc/ipu8/cb_payload_descriptor.h | 39 + ...anifest_db_ipu8_psys_cb_lbff_descriptors.h | 242 + ...pu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h | 115 + modules/ipu_desc/ipu8/lbff_ids_array.h | 168 + src/3a/AiqEngine.cpp | 3 - src/3a/SensorManager.cpp | 6 - src/3a/SensorManager.h | 3 - src/core/CameraContext.h | 33 - src/core/CameraDevice.cpp | 5 - src/core/SensorHwCtrl.cpp | 257 - src/core/SensorHwCtrl.h | 22 - src/core/SwPostProcessUnit.cpp | 19 - src/core/processingUnit/CBStage.cpp | 8 +- src/hal/hal_adaptor/CMakeLists.txt | 3 - src/hal/hal_adaptor/HalAdaptor.cpp | 2 + src/image_process/PostProcessorBase.cpp | 206 - src/image_process/PostProcessorBase.h | 35 - src/image_process/PostProcessorCore.cpp | 5 - src/meson.build | 29 - src/metadata/CMakeLists.txt | 8 +- src/platformdata/CMakeLists.txt | 16 +- src/platformdata/CameraSensorsParser.cpp | 11 - src/platformdata/gc/GraphConfig.cpp | 5 + 93 files changed, 164887 insertions(+), 739 deletions(-) create mode 100644 config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin create mode 100644 config/linux/ipu8/gcss/OV13B10_09B13_2M.IPU8.bin create mode 100644 config/linux/ipu8/libcamhal_configs.json create mode 100644 config/linux/ipu8/ov13b10.aiqb create mode 100644 config/linux/ipu8/pipe_scheduler_profiles.json create mode 100644 config/linux/ipu8/pnp_profiles.json create mode 100644 config/linux/ipu8/sensors/ov13b10-uf.json create mode 100644 config/linux/ipu8/sensors/ov13b10-wf.json create mode 100644 modules/ipu_desc/ipu8/CBLayoutUtils.cpp create mode 100644 modules/ipu_desc/ipu8/CBLayoutUtils.h create mode 100644 modules/ipu_desc/ipu8/FragmentsConfigurator.cpp create mode 100644 modules/ipu_desc/ipu8/FragmentsConfigurator.h create mode 100644 modules/ipu_desc/ipu8/GraphResolutionConfigurator.cpp create mode 100644 modules/ipu_desc/ipu8/GraphResolutionConfigurator.h create mode 100644 modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.h create mode 100644 modules/ipu_desc/ipu8/GraphResolutionConfiguratorInclude.h create mode 100644 modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.h create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.h create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphBinaryAutogen.h create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.c create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.h create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.h create mode 100644 modules/ipu_desc/ipu8/Ipu8StaticGraphTypesAutogen.h create mode 100644 modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.h create mode 100644 modules/ipu_desc/ipu8/StaticGraphAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/StaticGraphAutogen.h create mode 100644 modules/ipu_desc/ipu8/StaticGraphBinaryAutogen.h create mode 100644 modules/ipu_desc/ipu8/StaticGraphReaderAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/StaticGraphReaderAutogen.h create mode 100644 modules/ipu_desc/ipu8/StaticGraphTypesAutogen.h create mode 100644 modules/ipu_desc/ipu8/TerminalDescriptorAutogen.cpp create mode 100644 modules/ipu_desc/ipu8/TerminalDescriptorAutogen.h create mode 100644 modules/ipu_desc/ipu8/cb_payload_descriptor.h create mode 100644 modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h create mode 100644 modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h create mode 100644 modules/ipu_desc/ipu8/lbff_ids_array.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b3b8a4..5a4430e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,11 +43,6 @@ set(ALGOWRAPPER_DIR ${MODULES_DIR}/algowrapper) set(SANDBOXING_DIR ${MODULES_DIR}/sandboxing) set(IMAGE_PROCESS_DIR ${SRC_ROOT_DIR}/image_process) -if (SUPPORT_LIVE_TUNING) - #LiveTuning directories - set(LIVE_TUNING_DIR ${MODULES_DIR}/livetune) -endif() #SUPPORT_LIVE_TUNING - # CMake module directory set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) @@ -139,12 +134,7 @@ if (USE_PG_LITE_PIPE) add_definitions(-DUSE_PG_LITE_PIPE) endif() #USE_PG_LITE_PIPE - set(LIBCAMHAL_SRCS ${LIBCAMHAL_SRCS} ${IIO_SRCS}) - -if (SUPPORT_LIVE_TUNING) - include_directories(modules/livetune) - set(LIBCAMHAL_SRCS ${LIBCAMHAL_SRCS} ${LIVE_TUNING_SRCS}) -endif() #SUPPORT_LIVE_TUNING +set(LIBCAMHAL_SRCS ${LIBCAMHAL_SRCS} ${IIO_SRCS}) if(FACE_DETECTION) add_definitions(-DFACE_DETECTION) @@ -235,7 +225,7 @@ if (IPU_VER MATCHES "ipu6") set(TARGET_DEFINITIONS ${TARGET_DEFINITIONS} -DIPU_SYSVER_ipu6v6) endif() set(TARGET_INCLUDE ${TARGET_INCLUDE} src/core/psysprocessor) -elseif (IPU_VER MATCHES "ipu7.*") +elseif (IPU_VER MATCHES "ipu7.*" OR IPU_VER STREQUAL "ipu8") set(TARGET_DEFINITIONS ${TARGET_DEFINITIONS} -DSTATIC_GRAPH_USE_IA_AIC_TYPES -DPAC_ENABLE) set(TARGET_INCLUDE ${TARGET_INCLUDE} @@ -253,6 +243,10 @@ elseif (IPU_VER MATCHES "ipu7.*") message(STATUS "add definition -DIPU_SYSVER_ipu75 for ipu75xa") set(TARGET_DEFINITIONS ${TARGET_DEFINITIONS} -DIPU_SYSVER_ipu75 -DGRC_IPU75XA) set(STATIC_GRAPH_IPU_PREFIXS "Ipu75xa") + elseif (IPU_VER STREQUAL "ipu8") + message(STATUS "add definition -DIPU_SYSVER_ipu8 for ipu8") + set(TARGET_DEFINITIONS ${TARGET_DEFINITIONS} -DIPU_SYSVER_ipu8 -DGRC_IPU8) + set(STATIC_GRAPH_IPU_PREFIXS "Ipu8") endif() endif() @@ -304,6 +298,11 @@ if (USE_STATIC_GRAPH) ${MODULES_DIR}/ipu_desc/${IPU_VER}/StaticGraphReaderAutogen.cpp ) endif () # STATIC_GRAPH_IPU_PREFIXS + if (IPU_VER STREQUAL "ipu8") + set(TARGET_SRCS ${TARGET_SRCS} + ${MODULES_DIR}/ipu_desc/${IPU_VER}/FragmentsConfigurator.cpp + ) + endif () endif() # USE_STATIC_GRAPH #--------------------------- Add libcamhal target --------------------------- @@ -349,9 +348,6 @@ endif() if (NOT BUILD_CAMHAL_PLUGIN) # Install headers install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcamhal) - if (SUPPORT_LIVE_TUNING) - install(FILES modules/livetune/LiveTuning.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcamhal/api) - endif() #SUPPORT_LIVE_TUNING endif() # Install configure files, by default ipu4 is used @@ -379,7 +375,7 @@ elseif (IPU_VER STREQUAL "ipu6sepla") message("Install JSL penguin peak configure files") install(DIRECTORY config/ubuntu/jsl/ DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/camera/${IPU_VER}) endif() -elseif (IPU_VER MATCHES "ipu7.*") +elseif (IPU_VER MATCHES "ipu7.*" OR IPU_VER STREQUAL "ipu8") message("Install ${IPU_VER} configure files") install(DIRECTORY config/linux/${IPU_VER}/ DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/camera/${IPU_VER} PATTERN "config/linux/*/gcss/*.xml" EXCLUDE) else() diff --git a/README.md b/README.md index 9d29e75..2664507 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,9 @@ cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR=lib \ -DBUILD_CAMHAL_ADAPTOR=ON \ -DBUILD_CAMHAL_PLUGIN=ON \ --DIPU_VERSIONS="ipu7x;ipu75xa" \ +-DIPU_VERSIONS="ipu7x;ipu75xa;ipu8" \ -DUSE_STATIC_GRAPH=ON \ -DUSE_STATIC_GRAPH_AUTOGEN=ON \ .. make && sudo make install -``` \ No newline at end of file +``` diff --git a/config/linux/ipu75xa/gcss/IMX471_BBG803N3.IPU75XA.bin b/config/linux/ipu75xa/gcss/IMX471_BBG803N3.IPU75XA.bin index 5b3d1693a46331d47ae8eaa820deddc8eb6ba845..6c2357ca3fcb12ad3954cc68b97c56ef05411181 100644 GIT binary patch literal 227784 zcmeHwZ>Vj@b>EhvxYyEC@(@n*psIbazo@chy#&`)LB!jstEg6^zPfh)xQ;8w{Szn@ z5jW-~wC2I<^TQi z|3`dTvhL}h`-z`i|Anr5?4GWBy)Sn^+;uPC9m{L^{3{~Bu7m$nctTmOpJmq}??*Fv zRyKK|?B#{BmuF=NdiEr?hmH)|Z>+z`xAx6GR_?rgtbEb^c}52C%VL9I|7<*<-{yzn zb+e!8TiZWt&+6OwTiMz}`8_}L6W6c3w(Gw78rQxIW%nQd^zX{CqvvU^>1+Pnn1LVIbdxX9eJzvr`kk2m?tg!`Oc)D*ZyLscHY*{7VS^A z>E}nwe*SdQ&+Bj5-cOsK=WTzgOe%YMEq>E|=Q zFx}5n@u~B+U(=?ok>_pmZzlb``OmiZ)7I(pw)sTT=5xO}(Prv=>F3Hh{4+_LpZm=2 zZDQY=+y5t%HaE9+YqNF^{jH?Uum9ohZPxhnyOTCw{U5uvS?kYFC2gMkpB>wjfB(Jx|o6OWvQ#CpDk9I+vd+EZ9et}*CynZ;)Jvv_Ss?|#M&%9Eo~weLb~x+ zT}+hrGmS^m&rIGN`rk?V`E_YCkB8EBTE!_hk~Uv`s@$f?~nVLwv)C$ zM>gY`Y%{TEt2N;llYV~rfxE~1r^jHhue9ptWSdDpTdfK2Px^WGP@$h`n~m0lzn`@E zy`LJlna-8LXXYR?=pRVhy!yWFZKggvLo{XirKHV={^_{QK|76Nlc_dSd$yV@A58k$ z|EqF8PwhP4sGn19ru}R+SN=iL&tLer<9-g>Y&2J%N!on&g>jpy52c@}Q_i^Xp`^`E z{g>%B!`RM{%~*apY4h|Ou*IxV8 z*T_j<|D`_jq3<~B8E%l6+P)v`Tz^|87B z^P=?mQTd-IMmK%t%D*W7pOty?`(oRte9p$p^vU^8#Q-ILF#f#1Y<@BRZ_8R;a8Fr# z-1o7$eC8*Nf69MG^2z+Y_v+Sk<;oRzT|OY4Tsb*8i8X!zw;|~+?Y<0=PxuzPf51xJ zU3YhP-F5r6o7MN+BXj#d{EKig{gBjwMSHt8vaV||Sp9+P!ubs-xK&H>pEO}^tfOd^ z2`$kNXt{nO<&K||IwLKkIN>)fJ@L!`Ey~#T>HZ&=tDpXzGRyz|ZK40fTgMmQj_r+f zKaR|}o>9EAu6Wm=WGvhBLDv&jqZ8ef(~XR*lRoKk|2ivmcjJ0GG~I6s^MqxGyalpSjv1-5vgv;HREx4 ztTSV}Mcp2~HWXu}YMobBb8OEpUJFe6A)$*sdb`bgLklMiGx)0jp>o0EJI zxSFg!SW{1Qn!45cij;vV`7~JY@4j26P?H5;HYC3?Y|{-aTXYMHDm1?vCFoX4u|L37 z!V>FMh&4op{+pp2>~?Rmyd9g}uBvV>I>>Yjc0)H?*bOqa*=^;}EVXm=H)r-okkQ~r zG;9+5h<0R5bKUMyyWvFMb%)mNq;qo;y69NxUzED;qQ~?<{Z|B#`D{IA>p43)lex&z zyMSE4j*b=Br@<@$=x5Ij;Ib zyQ2!`t4sNqrd}6kt20*SbpyNIbB{=DygQ8X#5^v+Xq4i!laseTg#H;G={vi}OwXj@ zv>(pXcKTnrrY#_~L&(d532U+go*kz0vRGEffbDUqw?bfEcC92UakP!aG@d17t>_FF z{#EG^aAD*d`Twf9WYB=q`}g^&m+<0atsKVR393_2r zRO;T8|9N8kjD9KtN^%%|L&gzNS3&)N8|HdW`5th^>67!HiUmsJX#9D9+5BSspOa8?+xX`4nV&HEQ~s07XY+T#g@;oCb7LI` zPNR(!d|capG_01^!MOK!8KR;%6kN%|m<1O$OO0}w*^TuzrZedZyKBM@i=vGXzKR9cJo!1ucP)8){KYt-#@KfEei91{vPe5?bC)kRo zU$EUAE{v1qNVi}&bhCxscEg3Qscs5$(BMZjY!du%e_JI;3C7gn!VeyWZYe^iW2NDS z02Y$6dAj#8t-*zl!+L5aAECLB+fQq`a3&wI0{b)wYZZGXUWYnXPfXtTUVfD9CF*!^ zuQM*6OE!{VmsAo8Q1@`Suu~`Vx`Evk7jC@Djj_u-F2QJEH1l+DT-eUj87^!AsU1RY z*g?P_@WNp#FNYQ1hM8MT<5@!1ieAEn|3t>@Pv!r2ecsC+ zeWo1@&Fcq7e?~Tr!mxLYzn1>EEE)ThKc&w~dY|ILo!AG@Q5q#e??w49jF^Q$_!*ta zp>#5iQ@CEP>Xh%z^`BcJ_|aUrlo{RHoh$#M`0tmozgzy_=W{k*rcch##>@Eg{<8VS z_&+^yzi=+UCw{`@Px((SpUvL|7amRq%#C$i=t3NcrDnNbcxbB`rD(|^v(fV-Wy2?`#;k7#vqx&O!CfC$F_9vy+*fZe5Z2x8ZEaN{E-S*kqIN{j& znLSy5Yx&vuwvyjUpLV#g-V4^@=R5Wz6!|n*@D&$svfy*XB*k8_;5l5ls9RVB5W^_G z3EfI5ZeV-Bg`MzYvzx<(u@!dtmFvf-RxPe(DXl zyN>bK(qAOFaIKtO`B%~}n8Wh5*ay#a$rGcWiEV#G{^yDDGdh#Q=o>PQQ@CEPr^VTf zKG%ObvB8^iAt)2NwL4e-Me)BRDnBhcf5qo)yiA{*pN*IC=lx~#i}61$3roS>!u{a6 zeC8)i{*?dZ^4a`daA7!qOgcAQNC{#%8-S!wyRdyMR&k$V9gKT#m*E2gKTwHYuv}a2 z7dA_cau=jVTv(TTy>CWYvtUd1g3rF8>pq@*>2*uWNT~CA{RHfFwelk}7#3WXq0!;; z7fSf1lhSp$Zo0Kt=#mA{>NYv-k)q_(&uuRuMLbTg_K@n&wvX< zKq($O6KO5tE+)Sf-S*kqIN{j&nSEG)Yx&vuwvyjUpLV#gJFvbHGl(qsiVHVc@Ht{q z#)XTzg+&$HkK&uqt(0Pa_J9k!!`iXg&EdlC3*=0NsJc_eni72 z!4LPhGA``CZ9lYbWn8%EZ+jop8eI4|tmhX3T@qYa8&?PH=vaY$8id@6y~680nuOda zOF|v1CnoRvEg?59>99yW5^_g{G(blSqhum9us$3vTwH+%c2iuq@$N9jh4Z+C?W2dr zg*!V>XSndQ-s|iTa?=h8cEGd4R9+U#VxQ~S9+!G6`0_Gnl8y-%##17J3nSl%U2es1 zYJ}nvqd)&qUs5`v zjC*gF;R6Fd@bQaR!KI-MTspZHnD8N`PrLN)xNvu0Xm+GqaxF0F zhgb*GtGA2g=@xan47l({9%1j($ezhHXXD#Sek*<2;lgg-Jc5iY_=*cRS@1bxQpSagx`jmmTaMzJqFXV={_Fu4cG&B& z*)4sJM5bG?8#a{|cH0dXcF&Q}A0*M>M>K2_{BVCOx|3il8q$TC6$B% z*0#gp!cLvc>jrjHT)6S>P{xJl;3Egeh3!0@;ligrh`sI)F0a^cS^NPn9H#QJSXOs8 zw#TIhL=0A5b^|y7h7WnaF#P?S^8ahMZ{J4Vi(OU)+>_B)Z!OOm#$QYC2+mb2$N2FZ z3gEnN^ErN#g;i*j8qwF{EG1mHwp}KN(XGFue#!SAr8Umt>70LxKG%Pq7r`Db88pG@ z*6v*SyYk;J+I&m?MA5EZ7p1vwy7X zo_TLz&@xJ>^N=I&>waO~T3+YckiTQy@InrIMFQB$@5I~Nd*}KO1l@v52V6K_3rzTs z)S2PZ5qmA&^kGw=^c;yz#CS)#CD#VJrF40irVYoA*AwfszJ}CO#4w6)LbpzRvkxf#JW5Zs&)&@^|GQtz%?d zO#XTK*?5`!yuS-BjCXclIk_SStg9iFARzNlw^7F__f`1N} zSa!8;@gO(WEnXYyme8f&y8JrpCd8Xe{P8lAC>=kVsx7ebLC$Y|J>)Qn?5;zFO%g9xe=sn{CR)b{9^ped*|Fn z9ha~>0~f~JSjUAl#F6NS-Y;y=L&|(7snbdI-Y!E_6o-Ni9 zvS3RBGWHS-)bU^5?+X{!r6gi&W8Gd69qd&J=)$Y`BMEi<&t&$A3)|}(q_yDE2w~yU z$u*(Gl+veNI%0*jIA-q;5YqBUx8zz>Og^Rb8r?3#{ldvR4}zLKO~2fMiyxVVyJ#{rSpljbW;}W)y8ZK;j zr0?t=v$q4r>+CMDwVkK!uCSF}?GF9kInl!DDId%>7SlKlgF*TCI zGG+a3!BD z@0~M4jdQoUUkw*@xu-`X3CK2bH~Q+qz^`SLP-oA$ux>5!c$fu(qT5?!*#9tbgzNtE z1>wT|DGZ@0xHLjoeZKIiyO94)>dbKIbKt^$Y^43MZt>bcy*{CfC40LFt0q?V5~FUH z0Tx+5X#$G@TrS=A=*=ckP?s_SxDv;n?|^-B^EX`Pulk zlHW?7cDS%RF6yndWWm?_g_|t+@#LSQ5;?x

G^$VNpd4qxdFtE2Y?h_-pAe%92rfN0_Usl#e69Pu<6_uekU2L^uN;};8KmivXx zQls1jsSy{}RKav+->uzm-1i zaAAjUz7f-gEcl8GH(BsGVp7J1i@JqH05Oc>o9tcfu|Ipjg|Xdq-Lcut;ll2nc$sd& zZrHq9*ljml*zJy=gz;$bBN{ddez?DtabXA699p+BE?o4ty^m=PE_@u;gJVg8laFv= zgxpwxeHw(dioL??KKiI#cU~wZ)UkSE^1k=-wUNl}<5})?o;9hKd`#tdNg!dBI~*=t zT!9C6Q(U<5?l8uM^SFfVqX)-@pYX$&;lj^)ud_qQO*!L5 z74`EnXfC-gS>^K~?-vG+^V{+txG?gK*yUFIrbZ|(G5Ygw_EXOoC-|8hMt@mWh|-*7 z{H^IL=?@0V^0nCKv|t}bNBmlP{|Vz~bS8()vPNKX75>Y`jdLoS%)C@#pqr^NaC+M0`_BI!cV6`3d8n@}FFPHh&jf zcsN8lH~f|(S3(>KlH$T29P)=!tb=jyjSe3e_<>6Fg5}zR3!9}zd5*p6a!-#&vOkfR zBkOTWzrmL+Gdl<-YcGS^MFmLIjN!w0dc+cbFradexKZq}a? z_S*Z``nq1ahs5FF1l^Krp#%7k(nWS}7u7~qK&~#mJ1(s68g=qi(%_-v_oWRbpA&kG zZkGWU-uPEJ+sLH$Os*xylyEcFnX!Duu?{ga+kekwbXvq+Onxi6?X$IU!m;x+`>_7j z^0V=6CBKzE?Qmf?ZyrHL7JS8pn=JSoF)8E1Mcu-piV#KdP4=$#*q=S%!VY^qHoG}o z*g*i9ZozKY@LJeyH(c1=FZ=}zEe(D|!zRHG_qQ@G{2;V)&j~u9Ze?89A#@i#rZu?m zaad1>(1*k>tcAb3gpeC6uulVgQ?Xa#b*N+YWE%Commej2i8{x)*BO`3B^ybwODYKk zta69Lg`GN?*A48ZxNzg$VT@hAB#O+zM-Gk)+j%;}g-?AzdfgvfUa{Y@Joyea@%kY;*@VYUz-;F#P?S^8ahMZ{J4VllQ+dI(sh`O3T5e11|gl zC^SwCt7u*R2bPc&5_Dg zaj$bs=>cja!L!)8>WFaR=ye0TDK6Z2cNpWsc^t#`(L>|H;XIw;!sb182>Fy95^RmL z!&F`t%VMAF*dAy6<~MoS=nF0!Eg_#6KE-e)#y>?L;llD=wZ8pwpp6t7(KoW>=}Y6! zDWAz7tS=h2eGDn{StKrTqV8Y=4c za5EIMU`tR=_Hty@@wc<=3m4X{#ov=Gt&MeS@&e-Ut-|PaIS=vO4qG9%uYcO4sFOqaP72jQ-$$VdTIQUv@u*h?;JpZ{*-xnlrU>7=I_a zw3LtegMPln=g-K`jJ}*4PK2zf75#Zx@_tVp#w711pUGi#YEQvCO7^sQJ=AjE{latn z2l($}xo{~ny6FR5=g8lcUv97M;1k%Hkh5_&`RCwTt4#? zCV%RCgt7GL1((J$t6z1*Yk>(Lk~%Y7dUqVNj|Y#DZppQQZYh0w zx<%bC#r?wWya{`a?AgU@1AC_Q8heKG2-~mOKFjzIMYnx6k1Lq|cM3nVC)2-{zt%pr z@@x5-KJ9Q}cSzBnw~_^4ap5KlK1WQ-xNuRoum~WAQG8Q$E2h|=J>bF)-#j+EIb0Z) z>AFm}U^hf;E$p@%F086`zX&C0@FN$S1V7y0%D6B>i0p45Q zLrRVdBjjGksC5w5D)#!`f8TW<`;HeO8OoAS$Lh&6>U)0(f)fvt&N1$Fo;RtMd>ja} zbCp9W4u=aDSCWC<6c=v1JB)GRJdR=e=%I1p@V=h>eqkS|+9Bk+KP1=z&kj?0xf9Fk z7_dDq^;URLUQWF#-jk$MiEiHvl|Rwnl?)x$bIaGlUwS?Tqn}FM_sjo0F@8or6#*qV zjJ_fLn!*=zJ(({VeXjq!D1sl&g-e;yYvo@Q|If-i`F*kNQ$A0CbZ6DEJke@61j{9W+r;bg$vSjUAfoKeKp9GFM&>7)+U$=;+wR1}AT zEBS1B&aoM4oXgCX6k`Nk?&*)jWOJDJBeB)WkH}zH(3Fe`Xf`yZ`$fTqlN?m}^7+YWLD-->&1ez=RJeUF_1^MYWL?kgLRq z0hjD%wl3XMoec3vx8z#dV(Jz%rd!nQGT_r|`{`e4tmCzTJ(D_B_6%_>oVXN^ok}yM zeU|Ybif;RCZJcoI{LG%LzqR~qd|SzHrB6G2+O5`ld?pLN;?qqQe2(0d@#&&&VNu0Z z#aW?SDaHQm0iSja9-G}9J`G@?bKlWL8w9&y^J-zY^Wf8uKtUS(h=xsqAMS74@aaSA zwhf=o{B7@JT8~d3+Iny-NgAQKu-1Y#x1(bP_Gu8-Dh3R%dm>I5dx`++SUoX$-+TE{ zvX`ji!M)D7d@k8Yf?ZNcC_vpqdY&Wskb1dvIm6ye`@BsUvDn1TU>aDn7@Gx3?*@9iRn!8x&~sKki9*5bnJA2Z1X-Qu;tgbzub8PhH5b{TNt z?3H*O>R3IQMt$$)N6B8I&N1$F#^rO#MiT6jNSSIwu$$t-jdzDKE<6Vx zDdEBvm+6`#9YT)LEaA$v`}_zOw)1p`3tK>Hhmad~5by`QaG1)=Vp(_q4qU~Q9uUD` zWy?K2d@Q)|pNPZ%sr>)0&wJUU&$NTX-ZA*add{A2XF{&PzNJemuUGNW6&bLC$Y|NS!dcgz3# ze9p$*^vU_zco~1*UpBuO|EDMJ7tZA~KVkBx{3n;s=I??F4<`fW#yT!^;cS4VMt}To z-)|19rFA-~-rHq}isDdkB@1H~T-Yo%%5z*;m-~kTTNZ2y%6V0ep4TjX5I&TVP{$vs z_Vqjq-C8{MEUk@odqt=pP8{J?DI=kdKaTGc7v4l{F1WPe!pSvN$^N8t(Y!Z0dXeEcl8GH(BsGVp7J1i@JqH05Oc> zo6xP4Vt@943p?S*W;cfmV=L_PF%5RZX4k@QyWzq(_4?mj(BMZjY!du%e=Fm{&foO+ zAP3Z~j0?ltFMdpGaN*;yo|?%=bU7}pA-4}tg>MknD)!2}4t0DznMQr@-nLG*mLIQ{2+z7brhcTQ$K(45iF z-sz{_fV=A$e=Yq*f(zHm*_D4K{en3xUyFSnE7*t8&&0O+oPLp!CdSX`Ob(-O$T&{n zdZ~{1Y;iWD&-I^9?C_>s2+D+R?aq~dQT#87%1?{VU-3B`FViRIXX9o3d4JjbV*HOw zI4A0j660rn!uY5BC)c0N-vt*Q4w23c-B^?!&ITZDd(N@jjGQbP_uhSSJ}~eDl_+#i zTySBt)F^jB>eWEk<=(!-&Vp1On$NzW>pq@*>2*uWNT~CA{j|6Hg>`GO(50l?4`jUc z1qMzJAH3-OELggb_KFLC!nGlPgG*!ggxxmrT42J5ls@g!yW_&^IK(5}l4}FqQhJSU zmjV~|{v-w)+cRDp+B2co*fZe5Z2x8ZEaN{E-S*kqIN{j&nLSy5Yx&vuwvyjUpLV#g zJFvbH(}yhhiVHVc@Ht{q#)XTzg+%}{jN+Tnt(0Pa_J9k!!`iXg&EdlC3*=0NsJc_eni72!4LPhGA``CZ9lYbWn8%EZ+jop8eI4|tmhX3T@qZ#9ajg0 z+*pBq8sM9Xy~680nuOdaOF|v1CnoQEcMuw%h;=-;*QqdH*L{w<`D>P`Bowg99S#>R zuD}DkDK6Z2cNpWsd0fKw(Hs|Md}}f5He7gqdqZ59J?HpY?{#(vxoL+4JK))2Dldy= z;Q<}n<5F)0pOq~?LR|Q_MNQzs$Twn_Tk)G3p}558&%b#veT=~mVM52GV~E%`O$XLKfq(Kloqr*J*#>L6L1Js?WK=r73UIsVg$9g=lC ziX-$|`4`2Hb?7tlAGk1bHeRMr&dI3LI|?!8@x4-EXk$1fJfEV!^)YLw@=urBxXXe9g7 z^@qFe$#+CKC?j0}F05NiJXU9cpy>8Hcgrp1l3TjveN5_L=|b8kF5K(8eYBb2($EGj zom^7}`;*eAU3zz1xVz6<9OIbDwZNnwVx1Y&E$Vg|aN$jSWyWZ%lWPNeru3Sz9^k^I zcHu!fw0a!tOZ|`kMp-LLU++)T7wH8hxPnQ04Mja&CriZ#*U5^*r!2QtJo{?I@GaxGL8D) zAA+J}FHz?h_d4V9xnv^=c1b0nfVJ&#xUf?v^SXiE6c=v1JCt$ZIrvBk7q&P~=e2YQ z`5at$UV9lXZ0G6hITEKnh`sI)F0a^cS^NPn9H#QJSXOs8w#TIhL=2XdEk80`82{jFgJP_&!uoSz+M9oZH)!1kdiu> z*S)boR1}ATD_Iz`;KF99QC`G_Zv?h1*bvf^& zv2J)lhrJ>JY|pvgWzRmoYP-U~Wxy}~qORmGR6ncX0}!GqxOBjU<2B>ayie%TY;PA; z4=W&7i4l9P)ol|o-jQy}wY0@9rPt_o8F1m`=j|hVCf5e`OzAcD47f1cuh+70mT+Ol ze<-@`vw2*>^uJU1nLU~QwfwdAsg+;L&-B>~E=(4D#f6(J_#82r#D$}7VG%$KqxdFt zE2UUxzqoL0XRuKo!fqp6IO-Pch7GTU-Oh~*)8Ge7c8lPL``aWgd_dhMap4Ob(;ac) z16t271aR^qE{qk}r@?Gh?3H;P>iBvxjr!gng0vBnhFs?u_d3s-R7*ala=avvu*w|; zE*!mXU^m5u8}ANdTsV(o*gl%$!i{&==s8L^TU|o!sb182>Fy966}CyhpD_Q zmW2n{8xXzpm>IuOtZey$3s>RJ3|C@!))ak&3(I%a&jKjUQzQCDLZJuMVX_7)t$Mo`+^xA>*bv96&U`@=r-@?%HNfLw2qN+G5P1^XX9n^^ZqWl@D-$!D{{cP z8d3=YG7r@)->uO~`l@_^-#=hiySo4+-M%eotB~|gT-zA}i~Eq&86mC%R@Y!aVIR0I zSHJP1{Mo8yc0^im;nb$yq>j`s*z!^0#L&2rxf=A*?cru9X2F)Y(Q_Z`y03pRFlZSi z)Op;I_k|1V*5aR4AuWw{`<~oE@qLSJpo`z@P)C+Jq`lrR95G%U({$ol=;gGCe^a_F zhrM0F(un^dsl){r4hz{TSZ4Skq3_e47E(*&qp?n|4Rwo$ztJMQZLA|MO!jNG&%){V z8SmA~w|zg4E13Rw3O}<0)4!I#);_iJYx$Wz?QmgC^R9ar{*VP<@y#X+K1WQ-xNuRo zun6GzqxdFtE2Y?bIb@O5l8Ft0-$Ur$Wl z_da5blI1#*jtBQT$CO5!BMF|xNkSp$W>;qBWyzwOub-bHQ?G+vPL#8_0uSt_xNzg$ zVFoTt;;j)bO!(Gf*3$R;wQ znfxhzR?-*jke08-K4%4m82wc0#%)y!J~4hqKb3kVIgGv`t2HoqAE=VXo-+%w?&xqRj)O#YPr-+Nga%PZ*+)?;!toUpLNUq!e*&aj$ljPrxNIAupIpo zUIH@ma^&ou+||mD$Y5B|ii`epy>9LxYe&&ZOQEh5vhZv z3u&LYu)Wq-n$hm1xNve!^{_uFUF^~uU2S9q`n1D^or5drK^A<)g_|t+95E^5!bRP}qKbV+@lDaKm|}nSfD60lNF1Bp())!o z-Gbe);kB^aZn*F@9V-1^n+89kVUys8`&$_oe()%COA$I9D-Gk^b0jW$OlxrAk)bBueParwL?!7iyJ6rgUq zTUgwY0CMx=Ko{aS28PqnW217iN5nUc1kaaA7-7 z+g)KRub~e}?GSRq4gx3cJI!#I%FAL|cmNJu#pL!KHC)gFavQ6y$MA>dbKIh`r_k zG$dQk@5;7p(EE7Y9qSga4HQi3ROxmZaN&(R5v$o@-xL>4t_|#&(xpys7f~PoL(&n7 zV;yi|w*U50TPH`5;6I4dTl{9Yv3RKav+->u zzm-1iaA9{~d_A0vEcl8GH(BsGVp7J1i@JqH6)}wBo6xP4Vt@943%gb6*zD$TVP}j? zw_rC|tA*XpgA420NP{2Iuu1U4{cRgAd}!TLgigmwx2&SS?R`w^ap6N-&o2bJB)I5I zKPp*wV%cGR8iciqy>jt{Ji$E=L_3; zI>Uu6AYFL{?y-Y_9q{Zhm6ye`=x)dMxYS$0XJyMhK71^=@C%~iocD%p1THVVkB+?; zi}Bae*?X&MY`ly=?=PEQjDLCWoNoDUjaGlVGoB-% zb3->4RXW6xASo{VL8XuX#5$Nty)npVlw)#c31Q5F3rEvrpK@GSmwUZ$Mj5kUOHfYo z5{%`&bK;N7d*{??E(IB7f5EGQ9CW+|Jx?ir zdaV`R_VL;{;n?|^eOP~M`KRKj+&;DPYx$Wz?Qmh|eUBj1n-R4<*o+hxZv1AU{L8j7 zE?m?tECL8o6yId;PfqOzhz`` zX^w7A2j2U)J;e>Q&?Tv!|~Nthdb z95{_O>`e=b3qO%CCm)kK828>TK~xlnf-6}Vv)nIimKxiC~vP6yCogo@a!3D0#q!>GQ_t`1+&p>9JS#HMv*sYBZ5b0pTk?%I&Q!KGm_ z=$2dyO!$z}rF*?yL|2^?dx}bo_mJi=0l196h*`$~dZb$)uldGYmeOl2K z$w!mna+QRSSmh3l3uj(8u$$t-jdzFf{lbW2{#gFwpn@EuQHrZ_T-f+}Z)nTezM94n z^V-Yq7q;_scE7L%q;?3oZU+H7;Mwzl^RieL9-z-#N1mtDTXD_GmM^$)74FP%C5C5B z(Gi(o`~og4G>-7R;Q+2CWq0P9j0)-%nFwe7bfG9u0!x4ta}>e zR`Rp)GWl2*;h*+B&4LSGK{~l22dt|hl^`H7nkKhV>l&@)JL5SL3oh)3FBwBmX%}q8 z&~uvu<=Cq((>H^9S+FIGz~*yZxB9cdpk8YKpp1k%zMf2@zV}gClnf?GI>)%zIi@tC8%gjiA!^rCd%L5G=;m94Ai3+vVrPupYNUJ)HWoH&BsB_cG`ku3sgpSbWQ9w~!MbGl__5i|;lg@nNtfvs?1n|Oh23_;g>mZbIz^gj@FN;F34XZ0 zm2qL`Z->?`Md);_G~9rg6v!+N(%jOxNvbL8Q4v6;l{he7#Ggt61Isstr~ka@ zi+m%vQtzD1dZ0O@pS?34zS0Vezn1U9U=RD`!^vU_zco~1* zUpBuO|Kk$Q72GX+zn05qe!}EW`A;sN&EEwV9!>_G8!n{OS%ERMdu{ZA0Je_}tNG2y z5v5LVmr;M<2O0?p%@Y?~*eo^5U66V;&~>@@_x%bn3$|o)z)LSao_x7=%e@3c?-lm9 zLhTC|)~&@tmy&Kjknz?BL|J#dk4YVDHAs8Kg+JlikiY7ADOR|N*8&qhq;%1~w~O#x z@4b$s5_iXi*KvqPx+T}FdCgOLjc%9Weqr+`3=_sF9qZ)U(4O80L9DT7z=a{W6px*W zv=(s}li!MN`)qBTaP0idKCHjB{A_$%$#11kJ6zZuSl@`5LKb|*g_|t+95E^5!bRP} zB7iMN@lEJfO0hqCz=hpm_So#^aAEiC<4m_;H(0BM-FCx;-R}5Fj28`lM8hV*5BIk+ zF6_Q-KeTRTT)60OdmqypT=+Pw=NAH95?sg~R|o9qSb=>Sgxrd~F7KUF)4*=-e&ON@ zJg}SM!i{%_F)p0PC2SwfabdAi5zzd1Xs`F=D0TKdbfLd5mLjOy^~l0LQar}$UW zB)&Pdd@Xi3jo)O+6_*$t@vHt~!x$&{YvnNctY1^OUZ!Ti6B+#lxiH6nFo=)lLQp1j zi|^;kzbJmJL!XiVU-3B`FViRIXX9o3d4JjbV*DQw-xQOM660rn!uY5BC)c0N-vt*Q z4w23c-B^?!;z*Db7yjUoKa^q}jC*f%_`tvqRHD#4alwVnQls1jsTL3T<(?jmWPc(r z!MF%qShtpVtj+>K(XGh~h@;z7-;=w%cTWB5GT_3S_!GFWe2E9Td&A?k!F)^V%viqS zcK`!ixD=0_$vW2}?qd6UE4uBowQ<6+^E3Of{?_ud@ogo)l|JooVK;9cK}HsQ#f6(J z_#CGzEf4N%r&ST<tBsf^Na34J%Bp1txq*>C-M9 zvBFx+dV@9JrIBvQHRI7drPt_o8F1m`=j|hVCf5e`OzAcD47f1cuh+70wurl!{8n_^ zXY;s%>3^s2Gy5?8Yx!&KQ!BrgpXsv~T$n8QiVHVc@Ht{Ki3>;F!XkheMzJvHR!XtX zesSU0&R`Qigx%cz!Z?X`ouWBWw_rC!Y%T1TV~F`inPac+4#Wf(roj)E?8mzB4kdKP z-T+n={BVEEb-PES+637=pl*}6@CArltnlWElVUVfD9CF&gGUT0iBmuw`#E~z9Gu*w|;E*!mXU^m5u8}ANdTsV(o*gl%$ z!i*32LFu`zwQ)p_3$Nei2QYh%gn5r0LOx}O1baW69j5ZKSQZ}8u|3ZCeY0WBH2Q)I zSK-bKS7Lb96n%sX%XihK=VIeK`4)7%kK#df7;^}pSITE{7@gT+3fIfDoV;Hc>*bv9 z6&U`@=r-@?%HNfLw2qN+G5P1^XX9n^^ZqWl@a1^#+=2_ID^CcvKx`Lm#qcga8l{c9 zAoXe>={9gP6tiGUP)_y|4Agnt)!P>?tXqqJR)w@Q*6n+82gUa-wt+70D5|e6lBG^5 z_jFgKw;K8CA4hh7Wh6ke0V&zd>J*>hyWqlV#|0Noohtbp4}b8p-ma+6Spm5^VEhgs z;=*LVX8UZbxUQ8P+xPRhg6V&!@H6``{cHJa?NckimY?a<4j0DPXdz;+stt ze2$ouap9tFI%VxySc-2#w^EAz*#j=@4qwM+H-`(mC%tC61-oGpY+<+EaA6lH=(Bie z@FN;F34XZ0m2qKbw?pez#)XUiw)Ziu!G({*dVV2*lXp2TtRc4#PcaE_-BuDk4lu7n z9bZpO-uGL=T3pg$kt(IIR>-QGxB3(xhRPVDd|vEwKax}6{9 z%D*W7m!tzvi_Ty1IU9G=C+BD5W&C-6+5BSs%kzcZM(v_Ac-vRyhh6;x_@wDBfD7rP zFFX6j&^Uaa)PeK%c3D0TlaCCH{=jv){EZjo4~aIkb`GNH+=xo6OpAn;=L-)FKBHuV zk+T|o+t9cmHR8g{^MySuC&nz<&1{;xH0Ya8gb@fXjqOz5I~T77CVWWhj3%D7r4>|S z#0qP5TgM?D>6Tm@=$6t&m)}faP0idKCHjB{A_$%$#11kJ6w4B36hEnH-3U-zNnUQ;i7I~5kOd@_$GVy zqDOMDA_y88mgT{Mii;vq|M?5sbi*coFP0QNy>;CiQ9rgbKuiu{x8?c57!XMlV_L?A z-7S%yM1B9oyL=jqsiI(ee)e%07j_^?=5Jvxz$07Cg&gaz!G({*dKf%OI+tC@?WeU6 zm*)#(opUK)5kmu>6A8y z4jglNzHn}}XiuEq(&z24@iP18_FSGXd^zqHeiSZ*1C&c4js$6WzOb2Pc3xWIP}%5t zu$2mSL25Xiy5*i8Kjaud9(J}oUs!{ztU~cwy z5%bjMs?tQHps_iN*XW9Mh~Wc{t>XXD#Sek*<2;lgfeJc4W+ zzS;N*lKDni#)XTzg+%}{jACKS^M%z=SlC9-k%(g&>;}FTcFQrud`xrfb@Utw8vKZc zO@beO=Vq?k=s6Mx)GbBmbgXpCa^I0;^K|cHT7wHes9yL5{5_!cR0)C$V@Jmd?9%}8 z*ZYNu*P)Kp6O;G7mygjIBpna#b)Gk=mV6ut3b!2V;jP_I8*6c4r&Q*31H0Xs&lkpM zmhQu>-RDQRu)VJ*!-Y?MpnBaOTwbvsv_1I_HSzi`_q|V-mt}9mK8F{&6qDx<*Q{*$ zk>SGd_c_l2V9zCBzjJ5&we(I_h|-*_m1F#)=Sax7m(CURc_)?pYjKkjE?g_0$zgQs zZ}3C=&=?n<>p#y+`wyEANzUjt@8`M2Hm!FN7$GG+a3!BD&lfgBjq@Td zd?WB>!Ip#x>|tl9^N_2zujfcC&liqZVSe0&$NPLE#fXFzZKo~@jR|z`rj%1%sx#2TK-!5 z)XJ~rXZq{~7j`%NVFC>{qeDC=*I|fmE-NY#bqk9CVi?6Y*|Qg8oju$yoV<4~wsUa1 zjd0=Bz=fmN4eWMjK3{kW z7tZ4*wr}USa5ztAxUhN8g+E_-!G)LS3u76P?}uxiU(B9g#^?(!y!}0j^n60br4>IL zFO!e`C;gsg!G$l!{lX8+xc4#m2xkLC8w)NhMyN~ClEZpNFJXwrnd8FC^M!pJEe0yt z&1_o23N5^ns==iVdrhvH=`~O3BD=SXXvf-8no5jVVXbZn#yiq2xn|94p3-Y{yA1aW zTS$#z!Z-~c))NnT1A8WQcEp9re$DpT+PG`q{I>7s=NqQ~ox;!T#`Le{ueDFD{91md zPdi-L-KX>}OrQ8X-oeR#dA{(~u()6och8YP1a*ARWnP{ytiz&P1@4X19YaX@CSJyc zkK+lsWn8%EZ(&2k#;907dk$%w+graQ$+7+#T=+PwXXB4N$Ay>Y3u8{Wl+TFN>tHwc z&D`|vaA!VWxEdEG@!+{}VS5hnzMe1aap7ZnzVMvq0Bp!}3E1!48GkK(d5(lz9nNH# zDBb_U=*-T`b0nNS?R@fr6zBNA@xLVe>2o30GA~N^n=^hkUdEs6!{!&`{|LFip7Aq3 zVf<76lk3ms@4Z*ICIN%pbw!1*TsgTS2dr2l-z(jiy1y>MbkP|ocgFp~k3!X`bciEC zTAm{T<5VRJs`5%k-{wF$F09j={@_jmGV-IgMqZbP#3%mxbP-ED6+kXQ^$w z!=3XS2^)6gwfivR&vD`I*q$TdpC@rF&lh&^ zPqlIwKbF~+@^Mf>Ki}eW+^~|YK(QN*=xb^0tki)@`AiO@Q+vu+>Lqn7UXKQFpQh-L z1$$2U51tqCm=ihp%jnkbT=~25%LdfJC$PdIXZ~RF&&$uo%jD<%W%G;iKQFuKw(-s7 zGe2SSr*Pq1KAXP_E(~Xj33H>50~gK)m|KbqKM{G;Pe~n&dvDhuDvCqFm3+25N5Tv> z&RviiZ#~lOf&SnQi^fy3hdi4Ik}?wN?D;toXBbub!!gnAmi#}75w@108|wIbIOQ1^ zSEaY=9|M;GpB{~Z_l$1mQ5O7>RJvby{p;=;E<<*D4{35OFyTW=mpZ*&ME!w&DluY( z`EeKZjK8E?ACJ`|-I8n8yyhvrMz_m=3wQ25BsDwio{n{LZD7xoUSrRI3$y*2?XxNW zt6mk&Wiph$-%a@knpeheOpfidd0fHtzf<^Y`&-LjYoA*AwfszTn*~dfuntA>_Ip66}CyhpD_Q zmep}#d)zbc^$qyU%9byGl`e~hlNi(LG3gA0>!F+1evH{82X@*l>}#>@C~doH-}<#>+7f(xfB zj2?}Q(C(pK5hu)#M%ET`gfz)p(cSdEsYLwAf-TulHlORd)t?0hEu(}w8mS31dr!Ao z`R0A(0}hv@x1d?4Yjo4CCI0kqtlOt0-ufe1qbxlqWhB(`ALQo4*; zZ`XAEtbkkxGh)^YE}R-C`5dui%z@snOxZJ>N7(+$_Sux*et)I8Oa}H`uhRaW$}y!i zC-DH|w|zg4E13Rw3V&^XYx!&KQ!BrgpXt*Y7k)pSj4b$yZ#G%*IZn3?7tVCkB@kZ@ z;rOHYCUh&M*q^=O!kKP^jq(t7OL5^$w_rCcf-UTJ9$Z-0MjHHxhE0MW?r+<0;X~`T z4Hv%XF|Egi4{bfa5WvYh7jo-IB`?pBa7O|dBR>wLUI)9SPk7I~Zm`NJF5Gx`n1KtE vxN3w8d%iR81eRCh!nD0};=*>ov%^$g7RxHk$M!gT4u$%+{IRm-9vA-qkiVJu literal 219360 zcmeHwU(9XCb=SU*?S6Hfaurh52-AMbRV6nnwS%H!q$=4ot}ztKC3XKo!!;q$R(-Gp zt^7iKl>Ui@@?e#!Lcqfn=|fsxu8 zF&+5Dbl}G{7`=R!+CxVs?RS=+{MkPB!}JjJ!}N9c=Z*~Eo1%lL|6)8K-^DvpIrT?* zTl>fMSfAt1G}}Y^BY)-n&%7q`jKQ8{D2IRj8#jjk@!PNc#=n#J#y|d#|3|VkKz;=3 zPlmW#7{ABbB}252?`)I#h z{oK57dp|ipuiE}nn_L&J+78Bx;lo)!FFv%rpS{{&YLoN5XFs3I`Z@f>azF2iOnXd^w#&faFte?HsgrCj&`R1Q~Xoe?D#<0_x@VB!z&%SToW{fAkbXHTUzU;DQ4VY$-RKUvyic-yZ+#&)%z&q=qRwysY;y?n~E zEC1`F|8>#pFNs0^YKXn@qC6$NH(sPK`|HgwkN#`2p4H}yNAKB*N55o0rTiDp{C(`^ z*6{e_k6XEXK{$K-?CdPn_!F3o6K-htWq3juW%`b?vWIZvq2b1jx8Jr|{qVz5_{EWB zlQ^pbjYguGcCEpv^>;rbZ2k}eZk1Ag2j+!8i0#zrej1s1J>~>qEqP;-BFXl6()Em# z`HpN#X(J=+WC(y3hxafwJcROmXog>toR4H1`s>C)>&TXiaQ5(Ueja8fWzYhANdJ(> zZnns#TT5zsF53?Y!e97}$WQ%?*j94e=gzYfgm2?lk%j4fG zpZjd9pK$8*o_@Ukw$gj!+lzlMdBkl=AviJ`sZXP>%~`n!+{{)Vtf^-@O>MP)T+)NH z;6L<`Orb6dzHCTgW!NSgNVdop7gb395K@q>7E*tJtHdQXh>&Us5B=LgHt6lKYvV%sVJ#i+V#hd*}^3w(0HM&@9z+vNu!vpGV|6KO$il=SQS-#g52e?)hxl zKw1Lou%1}dI0g?VaaJ;@O1}73N2(AjZTdd>M#EKG=y$1t`D&pY)7)oYR{q1IhvmN{&$;LTU;yKd=;yN1VK4u# z)O|(%%iz&_`FDjujgOaq;fy1^lZyDmzBUHDY!~|ho+MEFEO_~pXIK8$MUU&2XGDR( zPZ4|LMR`j4yP|>GIFi2XuQ$Iu`p=3>wrzY%{+^w9{Fm&fdk*LWnDWPyWy3cMArj5m4vA z_^B=>$(JY`CXwSu#jJi=rLm9O;k(qq(uHtP{Pg#%4f%{F4ejVp0;wz#;man=UpDE4 zQI?J-cyS8U@Y9XlY8Jv=wp2zMjk7vCOt&Q4gMgpfHKVF&rq8TwqR%|PWvrvm?CrmI zrJ343>(L)8pZjd9pK$8*o<6<)w$gj!+lzlMc@lUk->!t8+Pu-rPiMhb{Itu0?;{I2 zwu{Bp@YAYnaS^~iqd1_*Rt>2?2f$D9qyW2*KfCCjY?Q~)o8hN=Y74ha=72!d8}!>l zZ~Nh=Pe3Yzyj|xQV7rE&K6w(dS$5PeXgErr@EO z%MBe`xRkG0fkT+gR>deCt3w^ulW8=Lfq&v0IO-hpt&UV7mT1O-Mal^Yh0m=Q~cL+|B#eB69z9GCE~Qq(0I+tq$xV^5dNCGF+2-Cg-#7yXaOcz#ag z{&0xB@uEB>y*FN@FZ=7wFOUAy3+GQu{-a|j9{(l#DfxTzcg0VqlL2#MlNP$@Lu08~ z&!0|pwL>ata!Snn8rDY25yNT8#a_4dfN{_HEdVU@Vm~BNZ7^s z@$IdSpPIcLTedoW3TwaqF>S$5PeXgErr{dMM- zNB_TN+{r`4i@~G!?8KvAvLCihd+_G(il4@z(JwkTbi>eO^r3bA!BYmfKTWHJO~x`s z_aloj4jc>33;R5``}O=OH8qPdWwW~oZMo-dB!x4l4}kcc?-_Q@b@KgJtwU9094ch9VxBc)_+vz?9<+;v}NZ7^s@$IdSpW3g|$Cj;* zpH}Vd;A7f?pPq*HU|14#Nidf?tq$1Hu>yxM!2uPcgw_4Z(=0bDloaZ)o~V2r1OLQ1 zRMGM9t&UV7mT1O-Mal^Yta8W0Ppd2NL~n|pcHSMN%fw50eaiH?lu7vhFp6~Q-{M-& z3npHilxdL^8XdT2ZikaM9m_O)A**fhj#xSsje~$b7I$?2xb&xBC@8rKV=FIdcgp)9t~% zgpj@RnfDFD3m-~+kVd!${8YCVx+JoKLH7Ky55s3360^$o^LsET2~vlS=0Wk(FIaQ( z8BH3}s7a@?NQ5t&EPvUg_s35+c84OGoXeKVP#!~8XNT#QWP1?s(~WE;AS$5PeXfQC4i9+a9i{173}C( zfkT+MwTe+XR);#QC(~#g15<5;+z{&=^Q|tBX4SH+ z-9cLA`BPq>7WnDy;P}z0f0>STxL}GGCuLeB)!l-7Mt*^X&Snnfdj8Zu_v)QryO5bO zX4i#gKRzGQ>&2T8V@uHLa(hS3|HeHsJ@PkV1T{anmA}Ww%V&S7mlz8!P+JS=*G9VV zWhtM$c;3)$R|s#F%#n8T+3v3V_oc@)gdJc7-)0Zwe^q*KyvTpnU%_RVCnCn+(XZ!E zb!!}S?Nx1ImB?Ov;I*lrm(l_$d`Qi_MuU@YCCotZ+(TUC$1~ofjj4rjbIOaO>Nl?%&s~-^0(5r>Zg@| zE4?SrLGV*&!B_mW%YyGC3yb(^k}WO*a8VQo3~zaflbT;rox|d%sh!D2c?`YH@Y5t) z)EgGS9(ubne(E|uSh9OKKfb*!;-^QHZ4p1c#xdO!KRu%M!sORo-dygq;VbeY2uui* z*{T?&XLYC(>d7=3$KXXI&Vi%OG2iM)6=I2I99X2BkiaT;68LGdx{2NtKkd9bNSAr_ z%S-GyB!=qmES&Jwnx28FlFD$-{a%vJNWX_`N2ZUcy7_l=eqJOgP%I%?)v?W^xk-p|4g4NeyT62 zeOxX?ZpKi%w5NsIhL)z>il3@x!amRKe#K8|FSEGBPjwr3C6X0RiJ*b6e_|NE^!Z4j zX{1mm9Njn+eyUqbct(J*r+o9BkS2t%*P)IqT?hv~f4btQs^bUY{Aq@T>ME1} zNR^eTKKPO6%hoqCAKM_eLd{c-HT=}sf4zOS)$ckqJ@@?*KlS9lU+6u(dGfc?x9X>r ze=EHwPe1$=KRXS>bNFx;e8mB~EciaMP{&WJvc*LJzL?^GkgXO{e-413nkRT_dNcgg z?uIO6i+aNX*h6po;iu*(=rd4U=SL*$;{5pbR>x0GZ^xFcj-OWT?cihDf}fs-_QFD- zyL^eCs>>bRQ%nMs^E8QKl%Cb0PN*j;AIApnZ4)nT#ZP&`#EX+M zEt2X?;-0~BX)=U}px*hq<ZbGR{6e{QKY)GC4kLq?B(B)3&e?|8)|v< zt@+;jXIlB}OMfo?!A`<>5dEz0j~XJbx~u)%6CFM+|7GytoSK4HH%C9bbWtRw4R~%!v)Q(_Kqe#Hl7BUV`^F1WDN3r;XSet?XWG) zQ(I1$TB~ehaJ0b|d~?~dGHr?oY5hMEH{Dx9BtavEKeW3b)!m z>(L)8pZj>LpK$8*o<6<)w$gj!+lzlMdHUg}hI*XZdyvj_Nv_Hk7ghK$iUWRiGWSy= zoESrfTx;EA0T$&+5RUp63d#jP$9A!aKc=!7^HbBC;irar6tYFVp_@JQb`|{e*zaiC zhMyi=wr%+7b&qK~etK-}g_*5$xx`P`_eWu!vrw*bxz#~$wgOjIk~w~g6_{^q0{ge{ zApwhIz$2HBQ>0%zq*lOBH@rS2o_a225)SqLC}Djv_^F)0A8yHTAs&GbnmJ1<1uy^R z?c$;)RPpFr^Y4f(w4@|WyPU1)^ksj&`Q_0+BrBna zHVYm-?Yyku(J$FgDZe*=*XN&3HIBKlNdp&sXk2>$KOKHrcgG;grbGT)cZ2&h4R6N`*86>V%tV4t4%ix0ZDIIhXDGW!V2y zW(d!O?@bOhzv|y#BV*k76yl_)W|y z{SIB~rF+6AzLk^ z{u}^5wN*)vxTba{8|5+dX85ToqmV7?4ch9VxBc+bCseps@aZ}~B4HQj$G5jSernFv zv1QAVEFCL#PpbBI@G)({PftU8YF@#kGnYH94!WZYf)T=Gw(9v)&+1So)DxADW8j}S z2aY-(zSWT`#1hRout+%}fmQC<_wN@g$wY5@{1G+ufD_b{9HW)VW+l*rI@c?B(;FKeN^WM#vMOWAa5N#`i%vUPdk=62a=X0`LDeC?))9!(m{ z=KB0ojHbL@^m7*HpWE~~oJY!;KC`k&q+e1UED0kE(GLD&P>xr?qh;#}VJ6#{%1EPe zp5G!{#7{SlKXxhHdiY%)|6cjrXIuS*Q>XXz=DkpETbz40RdS%01R<W-*|N z>@Gsv9^6X^*(;rwf$C+4{vs^LbRHhg&%=mJh6PQ@m>`csQ^V9ihEU3;TT8n9EF310 zt;-8Hx68)4Y5Pb>dcdQYBy_^HjCZEsjs{Itu0?;{I!{In`tTm<05C=SSXDI0nEOdHq% z@KeJmPfc%zpW3aSE%O=uPp{&bx!O8t~E$uTKm7^mg#g=+wVV$NB|17$#wJBY=%% zS|o)=aRH+tlv_eSqt~~dKNTEJEPt%vw%++QkA5j1P2e9}f;K1jbkzKB@BN#t`5PJj znjhbbkH_EB!xH|bmYIFf-_5f0EAzRo@Vueht`OcTnIP@txANbY9+MDufE9e3J&^xZ z>AmqH|Cv75^QY_kqt^4MGCP|Br%_pn`7IcwZV$I3r@|?bMZ5V$A;-{}h*_6cuqfBLy2w$=@tJobz7NQ-trFqIRVU(@1VJi$_CR-%8)A zpH}{@^qxEi!B3q9U-8o}3%-vmEaIn0wzvr33RrPK$W{xf&SCM>)XroRKZf3B_-T?Y z>J6J+54~L(KXsiSEZNTvlXqhyjnL%$`1ZDlpB_=RMf~&{$8=Bp^oZIsGck{@hM!^u z4q-A|6{Ga54s}93nMUInJjRLJ2&Ov6e5(VAgsfWj)ynv(oRGjOcM|w%vbu@h6hG~} zJ4ly_m$sfiz4IcJHVhvLFld<;Nukk!dj`vqXCYLS<>%{`LEnM|jClWM_RkMd)^xk-pKiBDq zN3Zzlil46dDOb&1V@{)zp7}MbjkM;>-DJ|1gI8j*a7tt|@m>asI@o6<911_xttFgs zm1gF$b$Q`t@HeG_n%=0>6+gvDhoEkC!gg2ul!}?gSI1AC{o31Sz5V@I`P}zQKg5&& zexdjD>B-+p->RQh{;l+$JpJ%f{dIqM4)e!Z@D&H_vf%s3LLEP?%BD*oelUypDc_|$ zT?6v|8~{JntMHT4o8hN+H)JuUQE%8-6+gYA-uA;!?QHC^-*I2ZPfc&fmaUGTR_*QJ zW7>kBo`&|qBB0)5iJ$5fxa{m9Ox#+rpQ{5i^QRGuNC1PFw_g@T~fAY0RFbx0FzDu3WU$U=hjx-Sn6y-w#ar*+$|4cItoQGmI;vwWu3ZRo zeWo(fXuQetTgEz`Iq>#tZ=dz(kCo4Ty!0zP`R^BcPoJLrt@N$>Y31Ka@5$2-KedaL zpTe|p7JS7|yDa#v_-R$PxCp?9Q5;ZYtA^B{1K_8I1D=}R3_rCC!$P*GH*8)#^tK;< zY9sYC5W;nSq_B(g(Zu zt>ULI{;Og5#Mena3`k2r9oCa+G>%)`S`_J2lX^ARQL>Xj`By2(0$J!4=kd;;R#%dV z-V{IWygP^<_Pl?e7fif3Dbs^Us(s>~k&iajpRUm~hrR`i8TZP^`BV0n@gw%Q4sGhC zV357q^Y}oHvaOGcvT&dK$3lD|@ynV0QWswS=$zB@=$rG!(XWUzH1lcf7x|xy0G*LvEzKKbp*c&g(Q__3mMf$S8-u&|Dzb5COYxBjU_w2-@U$UQ4e*B(LlV^Pn>tq_}+}I>V zMPFXb%z!1{r!lRTW53Yz$YQWc?2xb&-H!D+tkl#jE^%Ca42*koj%*IQ-JElN9!6v` zENETE1bG}9$EgJ6P|BuTOTxkm$4z9zIoywGRr?sjcd3J=3*n$R?kB7b`PA-BaNJZD ziST8U<%?cM7OIYzK&%}1$8j^LekNO1mbaM0`#VgxB-?{<4t5hxG;m}lW1Y$-`poJy z=`;GVFyh*Cn(j(7J^U_@f3JM*v#ox@sndJ<@%r0J?~QLS{=MW`#Bqh7T=4U=rdaUL zbbGMXTF;?43%=sGT^4*F;mBpfg1kkxxTr#M#UmkGEu{V&0LQfkPfc%z;{q74Getwv zLDU=c+e2?x!EyD;j;`|~5_WNZe0$r5;~rbKZ8&aWZwDXKb{zNE+EddPCk}Cm<6=k0 z3LL`3tyQcPR`-0GGQ8Uyby!bSK8}IEHbQQQbv%5l3#2D0TW)nNyMyAmop%S(6LDN# zpYmMnx#^G&9-aCx@`$fv|k-Vx%B49QzFa}%p{ z^2Z+xCK^nRkw@Q}e=gU66>(g7TKO;0W9z^#sf>SG^l(`b$jkrlQuh@qC5t_JFW=+i z<$L{F!oM;R^(*~RFMn72!7(v`+GoMbXS=)dzb^VeBlF}L8UODJu{U0nr=<7Bi}YoG zz4_(QzbU`VRLpbm=si2}=$GuLl;4}bD}Fki3OYB$rb3AR7P4?KZ^%F;5^0?3VBANR z!3HLFpd2MHWUlxrH8qRjl;l8}F86;nl1-dB9hw(q&i&Kuh|e8KBS@XiyX@>mM{c( zaSGJVZC-@20U79Wye}&Qn;7!^7TF#I{B*PvXVBG5pIKSdCBEeOE&7c3ski@n`z+~U zV{pwGg;gSPR*r-q6h+dfN{_eL~f)@P+IAh=g67AK%{U`00};AzO}Q=~$_~ne%tu zW7>kBo`&{x2!n@ao@kiXQgF)nDRyz}<{?a6ZpC)*iGzEVEon$gKpobTDL#&&@2S^H z7Mv%4M&wopz1c5VR=2RaiEN6WcHSMNRpO<*K4tpcB%*^yr~Y+1-Qj{MUYwL^kyMq; zJ%jjZ(CnibcwU|fwU*N-eS(x@-&*r)=TE;^hVP!RyA|S5vjC~( z(YNORkeJ9J`7g?pPO+fHxolsR+>d33@D|74vC*$ zq~8vsNfSTK%2XtNq#)_{qfW6K_N5QvNATWah~5I+k=3gZo>u)Q)H@?02d*kTw z_vGn^pFXY==ezLfEcl9_c3JTKtM?qE#3Z+?_o{4h5r7Y)I3Q%Jh14HhYsH-x{3k&; z>R%|>4L>#Jr=~Z->m>U7R1^-p=*vTSXb*m^~~O z5Kipc{RKyqEl09+tW-8wyPU7VN3!dKk7)~jYO_`E&N!m>pdblQoQ`bn+$q8m+*2u@ zxV4H=dRB)zp`NIG90OBrM2ce2@$juK&{btSHny8vUBXYRE6GG}il27g9YjwH=TBb= zP9dH8Clun9dc0ub#YveKNp&W1&tQ4LQBMUwrDetU<_P{W+F(Ru!*TGH3DQnJ+ufD_b$iiw$4a*rx+I08sb^#VM0)&ova8^f=)?Z8bRirP zKi#})ZOCUdX)K%ilRzqqMEH``!BRG|5M#&j(>&$4KYp4n)aSBgWo+K!cyX_?j4WJ| z?Loj#$6!yQli65jWmK8Qd49`SNBk5v?^O%1hD-m4hY$5A@%0~_^Dm2 zotoYZKee;5g=|r8&{hwviSO|1Uz-pR1ci7RfBZM$jsB>Y&y|UIncJ=q-YS_O?c}rFUHR`zkD-Sh&>!~3h5WBd?~NDv&-(kJd|!dW zEO_)QeyUsJplh$H3adnRZ0rUAm;7i{+ySWC5NCB@q$7(tLQET2kVa|$_gG~@M}G_b zP#}!^Q*1VTNgbU@Ig!-VLSfhQr==cK+8m|?lcLtMvHUVc6&V8;of7FFw$t!SZ-JR6vI`2fdZ#(?U@6^xmLr+OrKdE#jx%e!Y=(v4(GwehfWlybRQO^Y`TGho71zw>`B`@zX8~zK<-_@zbhoaS?!v zqBtOAtA(_I9RNQyjPlgPUsSlWr@Ua|b5F~( zNQ!-fPqvMtz2c`$xaW$WnjL!nnU{YdD+!RJSrA-cwweeL{o0a#DWAMn{B){0>aF#< zXr|8SNw)R;=~RtO zjp-t(NuO87Pbol*8-Fj~h;v`VXIu04^%GkCitDCt#VcFsJw1E+JT!k#o)te83{WOn z4;&B+zWxO#x%2{aY!{n&{`}Kz$igvj=M_HV$e?SmPMLj#7K(I*R_Bl_a#Qr7M0Kw1KFYt&&5$^w9Vz@zoVSt>Stf z-gj{PRL&E>e3n@Vzjn&Mkm>g%9EdVB^7r_-`73_f)$JiY$8+M$>CxcV<=N?9`g~%6Gy>{`Ti*_K z{#3V?@QeUyZ7v(mqkl7h`FYsuP)C+Jg!TS?^P^Y%6tiQ0JUYWd^|~b2XI7>*$B#T; zS|6DYNjO(EPdO&p5`OCJ*WNx0qwnGGd3afCKKK0+-}L0aU+6tOd-Au^x9X>rzc-Ga z{GL4h@KZYs@f>D@v*0TZ*k!@@k%b(i#00hHpH^jyi$KIrAzLk^{v6=^sa<@Xn%)dQ zwI@*)vPHc?zlu9wQE&U5KQ%`|9}wg^KO$il=f}6VI(}+;JGN}~^QTpNJNTHk;HRgd zy|57IE?;7lxDra@Y6@^n70TpL|>45vu0)=z4B}CkNUU>`IOl3$3lD|@mp%snE>+D z%O8KDaCAd8kG?g35It4Iaph^{zeIm7{lQMccq96`tO(@g-<7&)`;kNl9=(@;SL)UH zc=;F3IQG7Oe^>kYoX9Uw;4FCgwE126Ul;wai(a3R@&DBjd*elUO8UE^f!a8dzU;3z zzdZWS%CBz~^Ni<I^_r{wR=-}U*Y)2V>Du}K3L{Vg#wyV?1pQ+lSdIvDqn z`CygUAz`Tyt@rO!QS-ROPcNalbc!@;t%iw{zIHGC zCcW}&E?X*N^BQM$c9?ESwg=(->0sAo(9=wxS=mINd49`SN1qu+tP^y~cDO6)+CJ;i zA1j~xY^$Ge>hzvIz5ce+d*j=Se=m9Z;iqQc3Jy36zT&4{7JMJis^h0s+2SIAeMWIW zk*yk1e-413+Wq^drnmh3X(3zG8#b>VdfN{_eL{yyfB$uzACa(&^W)oF9Y3`@(2p%! z9X~Z-=eozV1wTCv?S+*2pZ_U3>0<3rN^Q0Q{7quMk}q& zW&5h+@)eip!dv)|fI6~8ARH1uy+{~VG-=|eS(ynEKJ)x#lTH|AD}Fkvx2cWJWXsAX zvgP?LvONg+>Bg=cp|6=fv$Bak^ZXWlM*P&QG%&La9`1y*d=yBt8BP)`hC z97Eq#0a6r$+KRsd=T?{S)9OkxkxlW_&bx!iO#JluAb)|MzVfK$)2V-gPWKZ5Nae*z znHEX0Z^U_W7VcdLbdRPHh`u2A{vb(=dga&7pK|o#{lX4jcH!ka_ZPeL9v>&a_x<}( zso~3#oESsc<_AN(5jkt`d-d`!MZtQXL1>SWNAKl(e7yV%N1sdh7v*ETWP7{X57x!0#ezLx`Xctmi}IB8-guFI)?a6SdGt8$P97p&3?98_Cm#Kh{jhDW zC*J&B@zXdo`bFo4ZWx-3{+6yk>;3yvWi6*@h9xEQ%S(uy4pTON(4{W-de%V;3a3OC zfiAD04WN@W(IT5}Ep$l=XHK6j(B*}j+hwCpt7kl4Rh{7@nlzS8{YfB|MIwAzpMPrV zsOfV!w=(&h=`$;fMEd1CC1tEerZ8^!k3l(J0gslgCxn@7V=5z!#(92=Y|&@-_Fr$G z_2^skUzAk>ZIprezZeP_d-yE(*;YT{)agBadi`ys_r|vue~x20z8-&1o__eLU5LIH z0yzu5;-_5}eE;gbj-OU#i;Dn!7{yQdF6C0GsXqt6PqEz$!>Q@b@KZY*TgVpmhUKM) z-b$>kbTCSc((u!ps<%(!({+AC!YH+F;&CN8&Pl(0I!ksU-xOF$jg6P1r+;GZ}vS#X|wt0NWSQZ}sg z*v&(j%XZ+ivANYjHk+;06?h_>;-{T=2Wg&o>GMG!OrKlYeSg#^pEiQGgDT6kNU9~= zGdS93W)`P{pME8D`^zD|5MXGuB_QNj!eJ8GKJ$>6RkoksgF#7 zvx7{$)DWFMLQvju$6oS|n8^bI%Cnynp{x@KahA&x>7%1&-PER+;$}WhyWaV=efjIfo5+VPLAxopchvlE+~C+FA2Y4y2ej99FaJw%Z%H2+v<_!X2Qr%&ZQKcVsz7h-ur4(<=DxXQbp0KPMmM@BFcbd?^o? z>D)*{M;{tldXSL6@8wMJJ=K{>Ig!-VLSa|@wA5otV=2hbpXxSnJC+wt39RecVc_c_ zL54H}>V*6L4~n0@M_a?kT()16-h3qZFrawddRIJ~^`@Z3YAq9!0lk&c@Bb~It#wyr(G6&A6Zz$Pm^qM5rB)LI3Q%Jg;eLT_-Sfq zvQZvGZ!`Qf$rkm7<)Vk)u8g0$&JULC9?p+%Z;SZp5oKG%Pp@%I_ry<+sJ*Zd=$>fn zLfRhH+-9dCfyp-3cOrM*6-1DcrVB*C|nHEV^$=owoer8_gik}Ai3(>`~@KgEiv&Z{b zaiFKh=R&5Rz9f0tT|EF)qi^No@%Qw(;-@wco*(S#zZbnXUgXb}KH||Ue)_nCv&ZE^ zfS;oE)6<*br*=1FF{V*(*i?GxZ9n|f9ED@Q zfl*4s|ZuN4&bGcC`)DxAD z;{$`AR#)JO-V{IWygP`tiI=wGr(gQKRF=StlQJ!m>P+IE!SXZPL)Q04nfmxSibHj2 zOAoU&_TE3^(f7_j7b&olFdjtC_5D%Fk1XF8C@|PE4??qz4-T%ryqW5s7LW$n#mQi;-_DgS;cp9V1~Vg z4+%Jx1<+c;@(*UM_-R$PxTwO1Q5+Dm)j~Kih9bGvia$|dQJw_hsDGiL{1G(AcCm>+ zrrU)vKQ+A>erl*kAzRcNy4gc-SHVw@{f?$>`024_+lHTB_n5Zhr^nV_nAtj)OZ@cM z?`S$@*>bCc-t76O)sba%6y+4ZYmkRNz;HTW9;(0gc z9O#9Y@0^cw={-J9e((GD!zjmSNlwKtg!+T>4;$Txoa_6e65h9~{lJyE6}6syaq{U0 z@5=wW=&@qK4&aJzvj@sk(qBr4YVQ*x{j9&v{PO7Wa}9Z9T8{WE%a-Q5$A9Vka>?JD zzw7f)^U(=&1B;D?=tJxJv%Wuydf7Fm8J6_SFE71vI!xK@D$bVsaE??83a3OCfiAC5 z*p5-ENb*t2w!S}VfBZCEsL%1ftcmyw==G47SmeYVw4ICXkYKVE-Z z>Amso#lM$4{qWOA)%4zr&-BC3WHVCywDTK6%8fF|C^1R5yuBnY0`OrJ2jsgz(1$#v z{u}^5#S*l>KWZE9Tw;{#`=f$!iUn`eTaIL5F35H-pH+K{b3y5ly5d|YG4U4s)Nb(p z6gug;wIX2`w^sCrE=wp^63bPU1-CX3O2H}Pr^kM`Rc>|g0=BHclifk_)6TmChH8`# z2@Zbh-oIbIFRDz7q}Vs&JRyD>-Xpc%zYpc4a3Rk3XiHDZly4sX;?XbVt3xk*v2bW} z^7G`~@Vo4!;ZFG*F@he?;qv%+`JNt@@UMvuBtd`F%jcT6gvVi>yj3zm+R10TyYkL*2ixTZ{R_b=kT+@Mt@>OP$uvpJw;s$4dy^g2kk>GE-9c%=3l!$U?Nk zwlq&UCXBK+rlhaQmSLnb*|IV=Z}Ezsn(A$mMBPBo<1z44Z~yi7S<;WeG8k_}_$EJ4 z9EXjKKdt){02T<$4nOZ zE{>Ux0Om**wiClo?RSo1p2oSLbVyxsE?fmaJq_*Y5C)IVyb0*W0(N5T$RSK->#^S- zb!==mw>s!;%L+Wv+kO80Q@%ec;HWEp%E@7|hxe`csp-e_7rlH>pDTW9`t0S$xBBJY zcu^kiArX&W@zWJQUGdZDX0e>&G%6{XU&Go+yW*$Rgv5Gzv*M>wBP)KYs;J@7W4hpp zmy5*8v$Cj4e97}=ZjLO(Jmp-~Jmr|M@_7E#+kd@%)}wFEckoaTck}YO@2~jjP{pr% z>Bk#ikAJW6TJclhO7hmh-3g2Y!kbJA?@ic-(dqwOL%^r|bKplG&7(UQiyFtQw}4oh6-NYFXK24D$SClTMgg zt8CdB)0u2p*+jNHzeTq7{{5*MnYucD>g?CvKHKVdx%3CdPd)kRCzN>WsnL6S^W<-( zZ|!d@|5p6elcyhks&~t+?~lT1#jxX)3w|9xH3#WAtT^dCRTD%;&!2XFv&uHvApZLP zsIUddVCFbrskb_QdKzy)%1;7fOzr$>)!w3mp>#;`y*NP)F-kVN^(=OYiMQaVr=dNL zKVoyap&JXQ{QjuZ#7~!Zhi{ShN3G94Jt}_68Oqqh8JUmO5VpBK|CAcDn0_$VyomS7 zA(Yy47;u$+Ys$h>PJS!@>!Qa>4}0MC%SQTJdmb+3Dd{hzzw7f)7b!bZ#?hC!sOCRho;MeqPAm{Y`m0h zeg5f+pJF>wJ3ObA6mga>_CK-|bAj_g^YkKbe|=_HXuMpcY*`tb*Er8_ku9D-_4Z$H zpY`aEmA|i_(CSxQH@&A%ufMJI-uU+7-%Fl;`04um)BVn$VhLKGf7*gk+WAv+fIbD~ zxz3L)*dKP&lok)%sVbCcY&Kh$cZd7@`KRHzr$dO>_eTXA4bg>zyB+-eX{YC$diMuy1m9Sne=374i{q{7 zkXy>hrytBUbqSx{m!3E%RwCW`9D5-DtI~V+K>oA-uJ`Y+=TBGsw6=0=%i}aEX_()F zpWelscOSDQi$<5nZ0(1iuFpT+AMeY~lE%v$YypZzCir}6LRr4p(#S&C6>UrN3M_Ix ze@abF<5Ao`h8BHB{B&QxYn0Y-Zz^LCFZ1{><%2H*WAN97#IoZj_x;kZ*f@UU{X*~Q z$CJO6zEwZ1{9EZgdHUg}W-`Td6(>LD9pgEkTb{lb7gaIk_5S^Qw-J4;&p!=Ipjb%@ zw!7ZHZ+g4R`P0+CfB%&6Q|#i{%|n>1z}N9?);fM_(rnuu?(^rL5ipkF&3mG%8m)CcubUgz}kv&o-h6Y=5|KV9+D6+h)P z+%@JjD(RWO;-{jS@PH|Kx7AJV3e->3n_k{*$97p~y?;MyEhsEuyDNU0=_dO+rVA0c zB_oSqQ?x71EAZ%($4}Xj7(0F)_x;kZ@cg>_g}&7dcdQYAeKgE5`D}I_k zTL25&il2s+am7#L7NKA4Xsv!d%idx-*$kz0#ZP$>QB{Rg&=P=a;vYc_YaD|YQEJZ~ z0pg!}RtBMNdHz&?1r4sV(9Q8v?>GhOgnCzz?E%M6!*f&D_eTXA4UvcU9sK;M^ZYFD zc}cDL-gA+9@$vY3`dsl-GdS-$#2c4h^xk-pKUew{KV9$NU+>@7xvD?vPIrsN6sJ*1 z$ov-kbbbD*I-{z}n%=0>6+g|at-$+M{4~=|_I126e(Lyd-ahN?@2&Z`N~=A$r!}AZ zeukEix3yy!5MyVBpQOJi6#RSTUyAUx`}bSOb4+4I=c_gZ8KGvx$ z65&f$XNTo0jdeVK>iJQZGCDo{E{}h&eD1TQU*XArztDU7@#Jr%Z`DsL|5kcWo__eL z%^ST#(^>EpKkc&M`zN!?bCk3D_mgaK5x|zC_^HTN4XMu7cjnkextna*C?6ZJ{C|fw zd1`u_oj*-FhN<7DgePrEoj{+O1s&F5L=R$y+58q@8@WyDR^F=`r*$JFG-%e$Kd)|5fR|@go0Of7ko>*ZcR^`}bvb zHU&)n7l zveY3Q6hD2{+K|t934vu+@zYcmiST8U<;!@DEX3Gx{4`HFCQPk1rlhaor`QTZn8}uv zk;dXw2eOPTT$1fUz)#0?!86lmRz{U+oaeXbGvcSM{u1fOU>S@zBK#r!K(;&Sy(GBr zmwv^PpK$8*t^IAKZ`DsL|5kcWo`c}0&Vs)_|1_=6*yd*V=?Up=hMy+c;^K)VO7T-{ z;`+Kp8I}@hkEkgFZ7;%Jo#JcTlLe*zm?vTryqWbsWiJU zc(NI-_wT1o8=JV{r*`r69F*s5l*iE9djCEKM1m~r`WIIFa?`1wKRt~*&~qdU;>-4= tpXgR$Z*fCZ3Z&Ni_o1fy5I;TkvjuXi!zyR^>GJMypWnYv{4`u>{eS)1A~gU2 diff --git a/config/linux/ipu75xa/libcamhal_configs.json b/config/linux/ipu75xa/libcamhal_configs.json index 42d9c94..2e976a0 100644 --- a/config/linux/ipu75xa/libcamhal_configs.json +++ b/config/linux/ipu75xa/libcamhal_configs.json @@ -25,17 +25,7 @@ "ov13b10-uf-2", "ov08x40-uf-0", "ov08x40-uf-2", - "lt6911gxd-1-0", - "lt6911gxd-2-2", - "imx471-uf-0", - "isx031-1-0", - "isx031-2-0", - "isx031-3-0", - "isx031-4-0", - "isx031-5-2", - "isx031-6-2", - "isx031-7-2", - "isx031-8-2" + "imx471-uf-0", ], "videoStreamNum" : 2 } diff --git a/config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin b/config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin new file mode 100644 index 0000000000000000000000000000000000000000..f37ef96f4d0230636bf64966324c0fb737dda1c8 GIT binary patch literal 384032 zcmeIbZ^$mml^@nKmPU6+lhL&jh50b7UPC0-gI05Aa9{$`ZpUlOO0?cc_QtVgCAmsg zw&Hk`Nn*r&aKsB1RsvcOi@pQ|xp);2Bp(E;56U0mH;W-l$Or9Wh)kkz2mD3r5blB@ z5WGyzsj6Sq>8kqm)79P2efoW;>T=)eK6Uz>I)CbP_c>2J&oB(b|MTDe$v^!$>7SAR z_soAi*Y+!a>9yB~4-CVbGWfIM{Q7;v@Wy-6`S9Lh_|dcJ{92B`EChf*+?NYqFz14Q z^T*P;;y*U{qZ~hxOXBtKV*Y>bFTD2PP0`{*(Y9DQ|_ntieRm1b8mj@@W^0GYDXZGazrwz{sZ(}CByU6zgp+1Yh_QKf5z~9_-4ry>w8b0f7bAP>l-Cc#F#yKe#-Ft=65SRLtNUE z=btk?zxxj=Jk^O$wAMBJX~Xm8@j9NZYxrL?Jb(Pp*7Iyx!~eSB`Q#-Z167rX2`AL* zhr_*Usm(uQc;5S$*Yj*y!@q2JUVUyI&(<~k=MB#{etjL!);0VqhUaJh%auGE*YLk# zcz*f6S;^Bl8t%={8(4n$S>dVoYHip5^ZY%#b?xW8aQ-$d%)s;yK~d7~^tYIR8~6 z=imMppDmuj?DNosKM1VoPw|}a3GWe0V>z47ziH(B*6VdS5x*z=8NmhcQ#>u7)>zKi z|0N^mfA=e;oR*K}&*&|IpW->;6W;T-+VkHsa{hzAQOarWQxpD61R^-6cux2<-m?hH z;V&CG|Ifc$k<;**@Mi=Uz)$hCG2R|8AWc#Jijni5{=HI8%V)0`|9Qjng}-0t`8eE5 zEPpD*f`KJGHLv2<$4)W+uNpc3rT?Rp)5iF{vG!Iw}(AX@w9TsxjGQ04|DNKWZR3z0W34Ws&2av@;rVAiR_7V{ z>?G$Bo?1uL=LEY}nG8$dUp8`n;nSs@6Fxi1d5Y)6o;y7c{Rc+Qzx8XSoHiy*_%Bf+ z!8ys(>eH-MLT(ZGZx}hhab1zq^0E9EQLiJN%4McustH z5%oIK-!we`ryrC&CwvV5I<;lcQ#>c}Zl|^K>qgFh_zz1t^R=>vJx}tq`m{d0OpR5n z|H#Pse?O_nY57?GRcgzCr+8W)vd7D)*RlR%BjYRjPinc?|s|9OR{1M1Gh*6c^rKy%pLtG_X7P4YTjDm|Ai2EJtrdP z49@7^Jn)}c&Pg%+R``$PhU7o7Gvz?(2=bFDsyiEZf`3-1eWF62>4Cvtdaf=PgEM&t z@rRmzTH#F349@g$DfnLYZKcEHZKZQGd?puzuYJBlTtmUZt zTy>+8U;hGzw)KWbA$ejiJRtc5n0Wv0@1^6pqnlTB^dldXKaYPy{(R%N^t^0;_?rTI z?c?PDQDX9$@)AIT2>$e$$r(`g?TN0O`_wqqWCM+7G6zxk^%oxS&QMh^IVKC;95kIhb7dJY<{pI@ck5w(tXXixl zp1l>`>w>uk`+3(u*T7xTKrN2GCAYdK@4WMl_Sg628SZCFX{ml&Swez9Dk7J;w_0M zTk#RkS$xRp1E0kQhR@;#!)I}W;j{RV<3pcI{73cvwD8%wWAi^6KGSEf3wj?a?u{XT zQNTU=j&(tOiZVGN$9GZ}d^ND#*cl%BBrt-UN;r`cl23rZ9)?~QOuC3iL|0SAM(ldh z5HxCa!SOTk;^-jqWatuWW-KDDIk0qOE+c5@yf8Nhb2Helj&z+~QwrJ47^btTw{*71 z*6V^^{qTpHuio5?CMxV{#v;<1150O%JzJ8%`WkbSCOb*qYwhg%mt@g=DIw_jnsy@> z>3?maz;O)A4?1@PVbF9DjDtDZJS}-<4K0%`+D$Pa8*sPuH|FBpZf3{{uIFwdlL3Fy zTo+^lsv?dk;GFUD>V)Pou9Gbb#~i*USA5E3?Dc#_Qy$>6#W9=ff^!18($c{MY_1F5 zHUWuux~Ou(x8jOc(5S8b3LA+gD`GD|)aP$7T@WA;cJe-C2fty;q z(b>2nButd?1Q-6T<+JUj_C0$Gyw?S-_WE(xK-a)s(m)}keU*%236I$P{nTZiD0mtWqJfg22Fn|j=yI?WP)Jt0&-4{3(k;f)OFe{G_` zaSY23I(GwM&~y=ugE`qeEqMnHEt4(UO);WuK;F>bm}_&pnV}HnVmBGmljgc06Hpa# zL;>fFmpi8BG4%N{w4ypOd`~_?a!-CV7ERArH01$4TO6~wE;uKkD=i&Nz~;K(Z4;1q zr;94@rn+DjRmzojuv>yG`n)cPZzH+#0fFupMEp>RwBbevxQF(-V9-PFx(2!ix(1%M z2J*U~@?WywuS<*%IbYM12l&YJ$1#XxD0{L_wivGqR<#%dBv0#EoVr(4 z@DyOQn_{@K*-BX=gK%JY3@RqZTV-pm3ueZP0xIJp3OHxH+%etzth|4ORyyYW7v;lE zAHukNN06MaY04w;+2WYZb-_6SU0v{C0yftLZ<~O`JKZXNH`N8Rs8X)Hw~uv8koB9_ z1@U%q0>`;USzY?`rvMd$oPf-U9FY1+Dh_ao0fCz+KWn9!Fma z!l57genF=ZrU$)&>Fg13RHVH~zWpdv5wnKfNyKZ-~Xc5lL4WhL71>=YDlTjaF)%&|=0? zQ?jluh)?taV`Xo648m>%8D*W=>xn-L9nfOm>w-}g>0qM31fD9^z-x&$(5Te~&0fCf zAgBwPF~gz#(9)5)jG&}mG$ z74|e^tL%u2ES)X(tgS=v$jdKJWMG8gQccqF$?ppu>{rg_WbAr=#Bm~ri_3mwFZcrLA)0ME%wcIK_;LwKB9ng#>*Ykp0_4)O`jD z?+j!aoXF;`%2!?%Rmzojuv>x%k=F(Bc5&s^LiY zd4jF*UKh+Y*w4ELx(4ow25ND1$$ppX`|>o7?~FFeU~sn2hQS#fw%>)}x58WZ3tr3D zYP?bTI*q;HkL9uB#mb`x(*uLEeLoD&^frjyE7Ljq?+Y?LTnfIIeOu`;d0Xim4WG%y z;9H*Wmc%y}ml)j6X9@irUqh%~$Lz8dAN&7Ue8}kopT!4;&*BEdXYqvLv-q6jL!V3h zNA>=+@Xuvm%>Uf`vmd~UXu;D)!JGAeZfrz>-z<#H5mAsQ>t4Z`_*~PUOq?Je&?+j+hk8m zM`Rg6Oy$}t8))T8VD~zgqEDFwepv=zF==rwtoc}sR*HPv>w;NS zDOcXXZV96Dye^2aaOI6f_X{F^AWq^&2e`ky*9C(fde=43HPAKiv^CJ{f>VvNymOxK zmhzZy9~g!=@8QJsJHho6V7P@E>I2K~GdRodGk7j<6(4mz79Vo@z-RG+;j_5G@XuWr zT;e~rE_iNyw(fHMoZBDP(r5bVbwSl=mP~d4pQ`kK9m?cSuM1ApQ90?qFDOc3?o&&w z0k_u$C1EJK)1;xT=T&@cG04&pJ&(9hbq>8dm`hvo8d={j=rsqO)qK^|>|%Wh_B3NK z!K&WU*<#PyI>dzX@{7LC>1{N$G70?C_YK!Sc|XR7LC)7ScG|XFwLS&b^4S*IzGrWN_x*xad;Pd;pljeRX&{fIZ-{XE zeOKr;Z#%qDk+>1A`SjN+WEh_ngOrEq-{u00|#Juvul zL@oxOk(cSG1J}SK$!gwY{AA91-MQgWq+}C&p$*9=z{InEk7&|GJR-WP zKa$E-wZs}|)M_om!^BGQ>>eyL7LisRJWN*!j}d3e4|8)c=ODax)+}3kO^MF0(aI$a z(-@|+t~YeH$kywEUj6Wgny-$jG*;NtjIFa{xXRMmV$YhdVq*TSCDqQ{>zq2KZ)FnL z-S6#JG#aPFRZDv3{2oyhIF4cYLFbW#({7B{5sZU5**q;OTeO>ExUyO8Sq6++`lP?& zCNv>)Lbm4pf|>E6fU1Zi3OHxH!ZFp)^!d@Zieui$$d&OQJzvq3N8lq0T6yWq9xesn%f792n7plYj)u?VV(_)kcZh4~nV++` z#Ne0@=%Q!zDL#oCd*QSA!05C1!0=n;W$}d3XYqmIpYk8r3H`b8*}7x%KN>#MPp=F5 zTVZi;L}F5g;bZBhDew9ZqxbZ(F!OCV3M#n5WY9=}NsNw3xBfl&t1WuJH>X zz*yNE9)qwOK}K08_Il#aVgd(w;eW@Q0eO-ptem&DbhC;v!3D zi#==W5Ipkoi@wfXV^FF|IzIV*!Jiet&nJXI&sVf-xkmqMlLfK5{4yt-x1Zi(e9L5u z>rgRV*=(gOppX6<2h!(uGeb^rJ$DnC4EU4gx*!u!6>&rX=Zu#-<`a=&^cGd^l#Y3@ zUpZ^83(g7XN=pY5u(>XH+XN)u>3s0rR2R&mO1bh5c1w`xkktj_+r^cJj$wEdZr*qp zj5%cdo*-@nxX}UbFW0}TwhZR^>_pBV;XQjRyw?SD4fgY{fv$nOqJdf*UGhD6*Z1Wa zvj4u|a4l~$=cdo}+3SL80hgro2lyK@l9fjUhp}H>P@|Q} z>P=Fzt}gg0rnId$Jc^X;L`q0L0VdwPE|_!?kBF{R(bZNtB*Z^QDBK=WE)HT%`ZCi2}zlEI;Vn4TM3{MKBKL zWb?GN>gQV~TeO>EXxVJ7ETE761_#pTb~8gxa6NYunGE=o=DHvgP!(}R0q2aDJErC_ z^!YKgvO4iKx#CkMU9aaWn(_djEsoh-7n~E&)ddeGU~^sYwh2hQ(?yjNz7xRt{=Q&{AGi@jscc;FBut?3 zfF*xx`D}Zgeed4_?{z_|y?)#^&^2(EG?2$pe5M`!DD}ViSq~$4E1d1KVQ@yD?RR1L zt#GyeZQb+^tF#$<@#fiph*eP@)AH| z@<{>DOwNF^Z(q1iAkW}6*??QCwcz91P8|7Tzem)JZ4%1Tk-3Z@rt`ww9L(u+zq+8= z%jYOt*~}QGv#Pgrw#e4&f?oabhnlaNy?li|&DbhC;v!3Di#==W5IpiE@LMu)gTYE& z(0z{S>j|Oyxh6Br4sT>Y|7#Nkj$>GU(7783gQkmM9L&k)X{At_$rkOV7;ZbAX25r7 zH-<)TH#6h}*K;?K$$&p;t_v~&RS`!NaL#zSV`?5lpC3ajsuRQauv#3(8JPn%%x+TbL^19$J z1WR4{p6(Y!{J@O>QUM;wNZ0FvNf-U7YoKeOYv8GAAg>E5<0boDuKRvLZzH*T{U|+4 zC%f$gALX&<`-y5iV*7p=obCHzaAseY$8UwReLoD&^l&M-KDC_F?uY@gb)Vd=?)VK8qU+pT!M^ z&*DRl4}C82AE)=A|8wJ?%f68J-1M1#dREe zS4$)MaH4sWYkZ;?7%O|jV-R*D$SCW?UQhg4OyB@9^nJfzrVu@yDA0^EcrCF8+*+;0 z?B$CN()SA*MV~nA`vp%e`2Fg z;mT$!Wr+;Jf#ETzm>6%Bt+_6k87~T`jE^YbobhtUbnmk%8(%u+{TJoKO&@};<+H$Y zzNRUUz-NnNHrEB`1azgPg9+GN7rbo(67O`Y_}x?&%%V!U^4>nyEkV|AUKhmM#gz{T zbiW|the)I?-sk}LVEvmSQG%U3s^zooMK({c1>W}yTJ81Yu7R$ByQG0Uj=mIxLqGQY zf=(k$4|?~ysXfB%1lJd!Cl!Zd`+gXl?fYSHD({8%3o<=i3Vv?8Gx|(khJRb&OfCjr z`+SGEhMxI3+ZV{-m=EZpXY?69v)5kuEIu&$EIu&&W_d|GVf0(~3!d^H*a`i)@y~7F zbJJ(~>2*PWlXfW$d%s4~RbcQjJG@_AuVpc%6s+I(#3 z$Z{A#K$pg3dAJ$0)mm_UO*XTauaM1*VLGdNOJ|F0eZQbr|C~L|UcSPfW^9!magn97 z#hxU=?bzhy7k!=6+h}NI68K=hayBQM7bDdLGufiuVqH*W+o2i#X-pYGvY_r}z-yk( zbwMVeGIn*rg9$iiyxcKe9wTMrOUJzV;4oah3|&j&L(bPUCEvaUlEi7#BI=6klU=~%%m3OdPg4iLi3ohL+i1>jxiQg3j zJefE}q69m6l;^Ya3y@dX3h#BnT!a0*YoKf3u4teZN0;n(xxOz?PdPxLxwm#z5N|HtA(P9OLzJ}`V1HyA#PCk&s(ha4aJ zT;e~f_osz_F8gBs=cdo}+3SMdhl+b65|e(o_`6?Su-n0dmxW73f#VoNn#iSeaf>PjbZ{6*^4^X4OVa!@*`nRtRGyW;Yh`iV%%8+k z?KEPf5aEPu&2>R0pfYxK!Gj4nXT01oHIJdskD-;0`JE3B!&k5|NU-#LMN=N&v&Au+ z>w}20oI!xYHI!D82axu8A1KD-41iqwh$LfC!Zuu^upW~|xu0BQl zYAZhKeDAip;1d6_b-{Dvvvs%CzUTHI&}aJTbwSlomP~d4pQ*k@fw8UUSe{%~ws$&S~?m)CKi*PH&^3l}X^AzHhkx$@?)r4067vDG%`3Qhp)H zdp9L-zf`2lWQ%rF3|BT=DN8OtIGw**o7+PWa(N4OEh8y(4E9z-0&Iw?6F>`pD?*DHJ`osGPwxc)=>}wv_Az$Ttmc!XY?pTz_Y5JTU8 zUocaMo=y~K#u>bpSOadY)-pVdM5BY~igt;$G!~Io9T++?mk~5{UYMJMxf$@GU(0L@`v>W4f1mj>%HcyMn7VV}Ou54C&mI0%d zKIyNx2~EhHkgd5cm>Dk$sERnEfOEzx98>*FpC5gzIOdIvTp9n-^A$~b1U{m`)sER* z7j(`?1oWk)8=2X01Z=Jg-ZlY=cRCNNC3}pog@x^7+HJ23W>KZG@^on)=awLo$?Agf z?c&PYDBf5f`tua`vAl3ogH(VAeC__YIc_|}`*D8RUU2t4qL~ifE4h+2?Tdflui9&F zj86aV(>2!V*K`eZ4crC|*jhKGB~5pe$$KLx5C+P zZc#e&-1P*)n10*|{#l{<2}2i$Ob-mse%p+}nY@GegL#?3beg~Wl}e!CnW<%(u~l}&MV8JMd)C$=c;qD`eVx0;pu}e# z*FdehaOJR{m4ly82!o!lXxDO${?{f8VjRQrgU;PR7&Ki3<6urUPfKqxzGbq-b*LCo zHXv{4ug$f&-OP{^T+iJ^CIkMYxt7TUoEWdds1pEX~SyU-k-ob7OB1Bfli*FZKPQc+& zxOwAYFy@f)8;H26;YJ5|=$~7)!*Lk$e72uW`iuAM1o20$@Lm_pHQ3L)2D%3BiU#sH zirf`?mgjASvwS*(Gx{vA&G1{{Ebq+dT+18JY-C{5JBcb?Kq?!(x9vGbE_ZghY zJKPU%muV{gs1eTe%;1lNOHB`#g70PDRys`HRyr16pGvj4r&ICgFE{wJzDMd4d)`{% zkAy&reOsU7fRDI_p7}Y8OAOvhpW$1(Se@>L&*B54&*B5aXZmFLES@lY79SWs^Q%kY zpWD8z^w~OX)laVr`qf&5&XAE*IAV@n*S#)iwNX3n-+d}tDcmY(s+L#-ZmrgWG>wu} zJXG<`q94Cp2JnVy0E7ii%6>u5)ZZC2pVcj{U6)T z_B1uSLN+rN*{?aUboQ1F^U0II`j~rz!CLv{^D_ALgfQs&igqK{=zndZz;O)bn%FE1 znobWVt>%+J@U-NeA+$`kXg9@hb-|UgfIj*g97vzr%?vrg_1sNlGT={|>w-)`Rm2em zoHJhTn2$vWeSQqBtWJDSK03AX`t5yr@CZ$XO{2QCnSB`%-de@M?zSi8uG^S`wY(V`wY(HWqJHo zIMXwOKN1Dh^l&NoUiNLJ!{lwHvlsp-zTfMD={r|n5NtqK_jt7|fFQM@$0G$>!~sYDt-F(Qb+n zWlOTJKDsei=5{kfu^<@k!jmCA>2<*&8Sk-ZQlB3~E2|R+E1UJYU|!Xmv)~a6pCq)n zsFKUp>w;LA(xa+oKuZp91WEsElaM%$;i<)kaR>H)LcC;QQ;_zq3!+}w>w?A%{jh7G zYoKf3>1&|Z1*bY^d1sdI9^}JUH~AxslH3VC$}PKAcVYQ`250$w2B-4g&k`U|Un899 znZcPJE(PDqzO8haysdOBKI$f}7r*^cdN+i1sXw#%oEwh1MVg>LIt70zT!5bWIolV= z;NT0o=ox*6Z|!1b+Y6t?2S%U82ZrA)FNqtBK8p_wpZVdX@Xu}ER{DGCr`HAjYNc=3 zGK`pD*LAN8T5Z&hdtFepQn*#nR4uUv+*+;0?B#PgA6siNV>LT0hFLl?mk}50yf8Nh zb2H$zvsT$m&90EmjA1&fdP`@EY`re%)enED`Kqbe74|e^tL%u2ES)X(tobT<Ug{)*R&@)&6|S?QQJ^8001FGJUo_`vU(CD5WH(?f6Y&0v@)-J|WF$Rb({{2T@lNLmc~UJ~c@yt+vfZMvnXkM#*cYUq-(DW)?ALm zdR=f@gMqI(jX96nug+^~c7?B+F>b5{BbJWHGU5`IYpZOab=#A`wHO20ypEp5se4t` zM~cv*-4r7xxG}n+H$2o%BSRGiSVmmCbrxFt44>S@4L3 zPZC<(V$EgKESOpLy)KBD*U+o}phF3X;~4I8MRYt7HihNhbwSh%dtI=>o*lJoplhIO zV1Etty5Ll&Ebq+n-PiJU`;XEmv?8&+;E&~&UHiQ^mfvS^mfvS^ChtJ<_^oiJX9j0_ zxDp+tG&YCsQhe%#g9%d2c!6>KC$Pm70%>haMX2jzNg^G&7)_2 z&gy>*4!)p^p3!IcOwW7av-rU1v-rU9TjgbOgVAU4f#IL>AJ_@~x$)0!-&Xn~S--9N z>~%pOiRc@)48zB4%<6SPtBu-muM3J+3bzWHswLKd+v|e;dqisssu^~bt`OfEai)F- zUvn^*Ozd?*=m&jX7j&<4sTwm$aJ%x0?)tIM;MMQ%0QH$(c?3RNlEAeX1FqiwNtjGF z=MnnZ12>gtvv>hCV-r zRyyW`SBBx!zld?E4aoV5raZuBi(@v|1?L2GWwV0`*t}m*qXsl9hM8E<3HY5455rep zO*Yf>6>TpI67O`Y_}x?&%%aM~ZZWDH=$0TZv$igX_<haMUgGnVy0pH;sOejO2HvW8Qps7_R;(DN)bY zH02TaY;nxyy5O9EemmW<1Z=Jgx;J-XK_}ohzd8&*{$aA2p08;;S&(?Aiz+EX`U&c% zk4GPG6fp5lC)+Ll9?>kSOk|5u4CwYBXTkLjJ!-gEpVo11|OInE(M>_&mQZA`U#WwLi5ol^(X3&S!;#2+81?; zjO}m=j<|-N>6yhP1_xizMbGG84F5qr4$%3K_(1WAAI{;|;s(QK@qytpzq%Oy3jNgL z37vl9O!k3YllwpktdE2ips83gF&Cp`TQj@ltHyJ;Pp>4h4F$lX6 z)Rc8%uP6R2bU=&!@BUsqoIU7uK~c{{u|{3B#2RpGb;03byf`|Du4tE7OJfmf)q$ZS za~VNH=Y_dBn47_VbtDreOWA6#Fql|NZ|H21t^dBDS33Nm=Bwu8mW4gdSc~-vTuWz* zJ!|U_%<}S!d!5ro=UbTsc8+X+y3IHpu3FN&h3yeVf#VpKA9Nl`IPJ!G9l7>w=l_qJXN1BMLZYyuvZn&-D4xw~Axl z$jFuPA3a~ultTNd_+KZ2OMr>X2%h*xh{Cy1SH<+Jj{D%@~$UxI40kl zc;{`e3uaMeB3p_o$GIhlDYCj?e7m^v7K=C5hyFapeJn5B)F4%Whq~Z`lFY#1 zjQ+Pik|h@cO@`kJ|AM@5q=%0*;hYYhF0bW{2m7rOw&-mq_#+|uc}qAPGd(c)Zxgu~ zJeN04K?JYqXJ~{oJu~OX9{>e8h7WA9DJ@XYqmIv$(75mEG3}0vd{Ia1@lz^!$Y40Mi5cfiM^iqv(N!8_Ps6` zRgn%R3QXXsVhy~OSObk}t>rWE;^-inVt0k(G!~K89E^sJ%w+@(ofqcjU~UHc)djE9 zYf2%T8N+l|^_I>S*?L{js~`SQ^VOSs(L{wk%~(WQb71Lgv1e@^Vm^8KMPFlXFqmz8 z(IoKoFUg|$QbN%4HSI<&(*N2-f#VpKA9U^p!l3CQ7zcB*d0Kjl@hy`r+D$Pa8*sPu zH|FBpZf5A@O{lpp$OKeH98thIR2d5r61%d$H0HM!zb^1*2|Jzvq32l#Ap%;vh_ zoPe&hbT9#%>w>pUK;oS)s^q?PM`UyBC0}`2R4G>8(QXMML{=A!Zx>fSAp9WQynik{ z41Ng@XCZ#zrWS8>h%2G*bwRJk{?2dKj_>IghA6qFb?Kq^R(ohA+$`kXg9@h8(%a7 zzC*h)G;+I{p_4bE=DHvgP!(}R0q2aDJLY2%LZ2T)E2$@1er}<7sT7el{eX=aP!8)V9X&S ze&9v`sZbXT?&WlxOwtgO}-<9vGbM`(f~0-pG2V zx**dtgEKu`3ciKQ}&GcWnOW#%Jr7&4=ly z*9Fz%vciW0XvVMtchF(juP&%hS8AQmCMj807wr25p&Qqy1n2}jIdMt^&EEDjxBi7(N=N1}f?grQ3E7(K zf=obVd_)1~jF&s6%VVT`eCe3?Uz8u2`4Dt1-vuh?Ynt*1e8fJh9kaPEI47X13m#0s z=DOf*6OeePTgBcxlY8Ce{eoFkDOcXx$GRnmRr0zZ-Y%}Z#pr%P#1D~3TfET$9_oX= zF6i~s|8@;@4Rj4WZ4Kmg!I#1W(2tV0ji2=}lWT=*KK(B47u4t5oBR<*^|TXQUx1z% zz2lJW`(bdl?}x#eeOVsA70&kkFgVl0rQmznx0Mc)x0TLb_}B8r|JXgp!!vzv;Y;=- zGPxMs)-5dOQ*gvJ^vus&;}!UVE_z0v;WNAJh0o#xqtD_4!*7=NL|qViM9<;_oeznh zm%=}{eOu|#X!i0IvY9bV zXH{?MY>}SY3W0@zc%7 z&n$(~Ot!cV6~mRyR?3o#54jYsVq(0|l$${ac0e+Hb6t=LsEm&&;GFUDx}eKrgnFHd zqvLvmh_c;$a2T#$PU_S1HBEU0K3g2Kxh^;-psNcWOu**4;B6C-c&A&%c~b2z*9Ehv zQm(v%-4bN|=5@iP`vnm{a3jEt4)9(VToY0IHC+Q;16>2VX&|o)D&ZyjU9RuT(>T5} z+RTQ***+TvXLQ(p7lz*oXZuldIwHPn*YdR*Z|Enkv$hxfu{T|1>eiQt#p{Yt#o$7mpA^FeSy~mpUK7GsOv<(3-60$N1D1}+GU6JQYpZOam6u=K>zv$nLo1WOFU#O7 zCM~Y#YnombE)@liV-RT~m(q3Gjh#X!jU?|Kj;EF8m&q3G=BDzj{9P-{WJYq5SgM^y z47bYGTo+^lDq~j{JeYuU#>*X3^BDU47+UF=-}&$`d<7eW1WV6XH01$4TO6~wE;uKk zs|y}Xz~;K(Z4;1qr(4A)06HJL%XPsls+245V7CM@NM092Sh(^5f$kSX{6L(o%4J*>Vm@uhT+Y7QyT7UC%AqB47X6rh2{4doaOf! zJeN1}CV708-)C^9X9j0_xD@={c4zdNybS-`@N0QN-=i+bUOOD z$KaOl68bs5%HZl#ByMcQN1czwhnzm}S$tslEN(D-79SWsiw`+I^tr@;Y+dl&_-sA0 z`JWq~tzR}Drk`FHRFBJ&$qwLCl|{nRVfXJ54QiO_ZeG#BkLcEf$G;(ezVTanUba8{ zO@Z~gU~<7;7c_ezD<5GjUFbBV*9E6Fm`PZ3RiIuM%)KZtzv%0n-bO6`0< zOh9Gh>VgLoaL#zSW4b(synlpNI_5XOIt)MlA;yP6&(}2N5%_Fz%;vh_oPe$_crXE* z>w>pUK;oTl&87(HUFw<_MAx_2{9pJq#xF(|ZYq|!y2D%1z z(?DJqd_ySf_g$gayzTHpg%7t zZMCnhTj+8?I|WBvL(lZg;u3>{FX*CY^e=`_;sc!zi4PQ?_~9IW#eHIZ7kWg`;sd2m z*2~54SLmk}Pw4y`>DzURHKaYIPxRUAf?j)tFNchz!qtcKw%>k1eYzSG`$c&q4>Z*#GYD#lzWyUKbSgOcZO>RZFY^w^kP%9>$BKgXoHO zS{mxJVX~C1_6mcEwe*J07TNmuh4hUEvHM-ooE zF6>&rX=Zsf4 zruvyaKl)a2%o`cGGXA6IE1L2Md_;k(9kaPE=$wxT={yU7E+aCCFs5x?p^}xbhZ@H`a&#JjH!1FWl51Re*=O;Cm(Su%_kt z?3@PPYq!Fme?F(s&$|Y?2D%3Bh6eID`ce=J{V0!7{r3eWyFv7DEpI%J&66^`VlVh3 zA@~-Enx6em7=yFl31e_3uRhOL#BKf_QT97w49@g$DfnLYZKcEHZKZQGd?puzuYJBl zTtmt3x*R#K!XvQ#|RlTLNMYdiS^y-H{)O_`3rY>m4R@o63Svp(n zSzCwTk(XceapVSrQccqF$fFmpkTT5kj9I zLn|HgdvdF|XEv|u`HH4Iz-NnNHrEB`1ax)5g9+GN7rbo(67O_TC9ezK5!u{&$yZ($ zRmzojuv>x%k<|s`+r^a+2#>8Le-;IIFpOP*FN7NuAygs&f*e-V?LmZp3!IcOwW7av-rU1v-rU9o8=|(gwbd5 znc<)EAJ_@~x$)0!-&Xo;own+;*9Cq2D?*`5jrxo%e9T75UKh05s2%tHf})ket%9a% zi8bKXYAs09C`rY$wKFposITiR9pN#8it@wU9L&w2*9D;;?OW|RT*a#kdz!I`wCW)7 zQ2ULbp|;fjvF&V6Q?n~%Gh>ncngdH`Z`m-PJPE9?b7N9mnFRir4E|0+81#HaQy$2-A=Mjs#L^h}GeC1_PWg=UQDhIkH zh!AV*f`}iu5kM+gaS&#jiu7R$Bu7TY&(CdOzRkFM@%XhOp>|Stv0n(?2ys`W~ zgR}fTgHw6$XUPCetP#%i%-~E9mxAwQ-&Q(I-c~w$;p>z7WA_{nNAP_soXN%Ds9Q|A zrhQ-xj@&$Y=I5;b$KaR`=%Q!z89uYiUid6NF#0S$F#KkDN!(!cS$tslr~C(YLVs@j zbKAF-K3k`)`s{TUBY@joNXq3yM|>w+fo7C7*!X>w@X`1?@h+ znv*SsSvsQU5!b2Cp?3#!%bwRf`+h;MIq0nBtEOfb>r2?%YQ|uKRlTLN#h$fwhzZ^H zB=DSU-hL@tudk~52o+kin_|QSH%2$~hKH`Z5u_690Kx6I81Uo0E;uCP&6UlZ@eWot z>vh4rb~b0hBNjeMXmN`*m+i4YuamP*YG=JJhyXa>YuH5Sl*l-a;i;vFjwiyVaM`;q zh!I>T|1>eiQt#p{Yt#mB@_k(k3ukbf2Uk_vPtuN}6y3Q$Yt#Bq6 zgQISd^F0MeZXP}Jb5{RjaPS3P^o%~kXL{ZXpT!48pT!4;-zqPQ8;m}S4-Eg5|G-Y@ z&y9a>`!>@j>$g>(y)Nh@Q4tF9hAqSJF&ndbUC?TycHHZNqLsp}f~IPTHQ?52EoLvD zbIiV9u;y|c*6V`92<@n!!Pgwjc@(dOw)(26*%iKO#xR{#y`>|vj3BayY@n6b1>NhM z+;&5oB)DDqMR)z!XYlIxci{4wUU>vQqQG%nnFOxc4P3qb0}}yevPHYOsXQxx*UAEh z=o3rz!4Y6TADl_=W)M3w;18SYf=obV9F147SpnEdz&YdPj;VPJeSQqBbj$~@48x~? z5#v%DknPVU(z+uHPAJ%p9XqeaH>m| zcV_wS;REtkl70vy5!(r_p8&%xG!d7t@OY5Dl!rkEXZd{wr}AE?E=cvj^mAtTx$VyA zGd(c;C2;ptD*oeo@!L1=Sx*bc#GkL_{Z(rzd259;xfmREi=6K%ICAsonV+-zAA^H0 z=%Q!z89uYuUid6NF#0S$F#KkDNjzcnS$t;rr~C(YLVs@jbKAF-K3k`)`s{TUBY@joNXq3yM|>w+fo7CDwr3>w-a5;#(um)X(5+4(38# zuM0vy=zW4a)p_)FP9HNuE0e(AczzguU!J$o^n68A9^kX3{8EcCn2xtUmCbpCe)d2y zT!MS0EZ~P8a_M>QlfZF3Zod;pO&HB}!OVD3K&5{~0q2aDJEqHHB)=;i^X9w5aP>z? zdwRa6DUZNsi(@v|1?L3x+v$!aU~^s2y}1($Isw1=)nWMY50lOGd`;WQg2X%BVoed! zPw=ro^=&1ziFZ2L4))`aL^e15eC1_PWg=UQDhIkHh!AV*f`}iu5kM+gu!+YN~ z&^6FCa1jmUb-_1e7Mj08KSR##|+x7rtV z3oL*1r{IWd=$W2bTw-wW1zq%v{>AV~e4z6o@qywKKb*s_#SMnf;se8HeswYY75b^g z6FUD!`fQz2`Xt`=x}c9hg)bv9DZ?5Q^0r@HP@k^G#6D&$HI<@ylkt-|?{(*fhdwEd zprWi3dp+@Ip#xg%fA{y|;p{=L3yOLsiZ$x0C7*y>s|yYfg~7yHdP8T6Z2fygz0%w##*db;95Fc z>{(lfV3sF=-Rqn#I^W79uybVl({0A-aMhCDEo_e{3LM9<{Gjtl!f7|g>j=idoNS(! z-eN*iVUujpZi?X&+-8yDl2v`;QQU+k^iIguTo=rY7X?&B98thI;}wpnex}clzEvFa zMn?{g=;?jqa~Sv z!5RH;eI!dR1ey%L75)Wz;c$;7*<5ov@##|Ph_(HE!%px~CWG&Jv{PbwVDR52axr)= zZ{#h4*YqzOlH(;C4Ps=;!#lzVtd~ zm#z4S=PW+t^nuUf1H)%=gWsv;ds z6qvwM#Ts}mu?8B|TFYnR#nC}D#jXxArm={$=D^aCxs0Hp^TOO5%*|lGy5MzsO(|qE zW0=mW-qP73Tdxax^}`=(zIt;nny9d+8H-434lJE5_N=W#%qK6u=7sYECv!OK&m0WwJ%PDF$Q%?v@^M zDGe19v|43rt_v~&mGKb;oHJhTm@bbYd5h3W$Grcdd}#bb7?;|foUduhBk0kmj*9C8zfW$l9D$eVIcSJU~Uh@Vrl@oCILAZJU zTzIJb5+2SFKSUyJ@kR%D=zCqz>!<(i8t5A68hF|o$m@bHg$bY^rQY)ZAMG%cYlUk* z{dIFa4jG)$XWxUz@LS>Rd+Hb+eZIZPA7NCuo#6Tc^aRQ>J<|h&v+o0Ba4K(O{cj-n zOwSC?^l&NoUiNLJ!{lwHWAWb#e&u@cTlWNRe9ay11Qu|79SXW79SXXv%DleF#0S$F#J>g13RHVH~zWpdv5wnKfNyK zqmWB!*notjtH9u6c6h(KpgvuxbwZn@WL;hG7cjJ~H#`PmH-eh7PVDu>pM?%+vF~-k zsETwjQD6d36>H$N#2RSSYAyZu1n9FFEyNc22{gz6l6cQEJmyyn^Kf?jjbSSd)C$=CX^?E^>uE9;I+Eo$7Jw#62hS8E1L2EA5q{q1{W=; zg$NzGg43LAp4PMRnoPE6H^p#evz4+$2H^m5>8XktzH#*b>!}xP44jCUfeVFI7^DB@i z*b49a1#=Dd^R9uefxDuCS{z-n-{tzgJdNWsAVwJsuKD!4xL;6zff+xYYt-O={do`g zV|n3tv3T1V2Da~q!P&ka24{90#O{^pxbFpNfwO%-49@g$DfqeV&ge6F8UDH9`hLgi zh%Im?7lUtkzFQLCTH}?S&l37MzQzu{j@fG~KKB2y_>j{FK8p_wpT!M^&*BNgXYnD& zhd!71kLvwt;h)RCn13sMwtidn+3SMdhl+b35|e(o_`6?SueU6$r(`g?F;t_AWyE2Xiyv zwX;^)%wE1iHZz9ltm-YDEwc5xpjSWqq2{Y*FJEC#Gq%c(xX9AkV$Yhdf=6C{aj$bJ z`jkoFmu2u3^I20pU(@umaH%M89G^m6Fq19X%}wQ5`MXw@T>c=Jf^)k~P~8j!2aYxw z9ERq)AQMpOySm`P1Z;6k%~$C2V`!yge&@r(@D=m51A4xqDG%`3;+V~K!8rk4UGQK6 zHrEAjn}EbS-C{KX(D~S1-Y=L%m2%}B?3N$~$?Jj$3s*iM(EWmlABdB<(E%RngS{^3 z_1OP*4Rj534LofP^t#|w<1Fu-=ewmm=9~Niv-`DYoTJ|fuAh>^Efl1+XZd{wXZd{w z&*hE0FH{#~dbku^e>eS{c4zdNybS;B@SW;{OfCkub&Kemahs+AOYNmT?dC<|Os>z>_+VgLou(>XH+XN)u>7q)Cklw}a za$PWsD&@*M*eyXUvbHXW_z`Xd@kR%DuM4h;sQsF*fv$nBf!#Ea*9G4Y%KCj*=rwPf zelymvZG>x{{WWtr4jG*CeUQD3f>7gp82v|*C-pBoARPLg=rg_)u34M>5lN@S^uXZH z5xE$AMqZ|$7C6&0gS$_)*Yv>jb8h&Ie)d=|&Hiwy`N(>)FX>^mOuk3=tpIdAsYA5d z*VZi}PdPXRM_fbC^vvQCgM%;VqG$9khEL)Hoezl*6rcFv9DXfsFnkst7(Vl>i{Y=( zPc5F%`M1(1>zC3eakbY4eH1Eu8Hq_5)|imD{py1HbTuaSla#C`y~a=Gyw{x@9z{wv zu@~Bqd;&~7`}c?@UBn}ztNJ6UTvbb~fkv$^I6O?O6wmG#G-DBI)xpDbmGBsGru;BB z2XhXxUmeMW$>{tVtz5>}eE%orv#K|Aw#e4^3wrItA8NijrqWnpPcyd4jJU|s*<#Py zIs^~@){<&x?sZNb)3-7S>>SyCMWb;#T(zWk&hHULf#VpKA9Nl`IPJ!G9l`lP?&CN!aULbm4pf|>E6fU1Zi3OHxH!ZFp)^!d@Zieui$$d&OQ zJzvq3N8lq0T}Hq z&MiSElhp;|+r^c)SiG@5^yew=V|n4G2B`wP|Gr>QSns+9x(2!iE~A0GF8ETI2KrGR zqvCf%n<=)!HJ|>vxgLiM&giq>$71-caQ6FEjLtyvs(Zmlc}98yWtpDofx+4DgfTdk zSNy@e7^E3B!kL~Koay0G@V)HYN{7kYO6O?!OfCjT-6A=lKRN|RTtmD3 zfeAcStbx}OYoJl9wczJoghX@@)XvP9;n03)>BwA0P|$f{ZVu*VuwPwpM5d`Cn;FA& zR`r(77TJ1T(5oN*Q1jKBnYy4ETV+RFWa(_NXKfvVM_zu>*SQgbOEpQywLY&PS6VvQ zk4eqR=EcxkjBlB2F~%rHlnuxmdZRzp+XzxgtpO75KA{6z?3?R?Ou&ipBKh?PdkHva zyxcL}=Q|~z5nAb(2mATG=DOgVfUYihFaewEg11dT;+<|4=XJq5BAZ)W`O3?pO1bh5 zc1sW;vbtb=ySVbv<5BDH3*vVN`|k^S1@^yP16>1M0~gXjuM18U&+^VJ->u)1|0q36 zM`C-yAIme+my5R@*`xI!OR@yc49@cV49?^o?$`OY!kL~Koay0G@V)HYN{7kYO2^`V zKlqOJ3TMBIS@UyNhiHW}xfmREpt#_|!6`U$^XQqMv-%%{gD>c!XY?7qwTqQ)FMJjs z7=0EW7=Ej~EN(FREIu&&Q~m=xp+7hNx$WCZpRLnYefGMbU#-Qh8i`36hL72G-Rpu@ z8@1#9J))wO!mWa)YKb-A)@m)LW*2kzy)IaDyE?4b1*bI__?pv}^QismyryPX_^KJJ z8)_lc(h*rkT&8kul?}A=B(Qs((?XeVWfE9-#@J_Yw^Ih_4ZZRRd_;lc7(|-LrR1D; zW2cZwtHl@~cv^vp05jR5-P~04_XXF=0*2@lOSRJoaI0+1bwMVeGIoW}g9$iiyxcMM z{Z5}BLn|Hg!7Ib?>0iXS)CS~yMN=N&v&Au+>wrL)DJwRMOI<>eQBozvTBXk`-k z8_y5J?}y)CQzSiK(Ub@HY$?CY$>!~sigcN5(Qb<2%4REN$;F3U3eW8}!F4m>HP7a{ zAQMm(aYO;@ zeL=V6(w;?{YQLsyplhIO zU^flqb-_1;vgWVQ>wbN}BSLmk}Pw4zx z>63Lz>67)?>w-QK6~2tbqzr3J$lHE(!T$S#qTAO#o-4Ti8+?M5lG)`YfCS_D(`P1U zK-sr1+$WG{@LKW-xV2i#@G#ETNz;E{FzRF3fq4}YJ&(9Zbq>8dnA2{r3qn8IxB9Bf z;(G#xubMH-qWRd;*<#O{Y?w@5esQlWdK>kvOai<6J$`mck&M%YixzdtBk&Ogj$?4q ziJvMVr`^~oWYXqj^R!GTRbi8C(Qb<265MNLnapUyL)YDi;a1t2>w=l_qJYZyhyuTzBGIC{ftmiA5@(6skIA(KQ&^aFw(3O_@?+Y%p=1vwQ-swEdduN)@ zU9JmeQKho-bZH*vmLQYK>VmudzF?>ezE|=NYg(Sq&S~Jib}Rh(b)VJA+4l3Ufv$nB zfx~H_7DwNb`|^`_-g!s+Yk2|~f2N#vD_ryJA1%oY49@6(>m%6iQtv#xaa&9IMXwOGd)}i zzL$Ml=`eX)=^PE8$;IGXp6`~#Hx`!|+|FkS{TyG{my5R~o@~WOJZJGCrw@D<9~eH1 z8w`IS@r2>C_>kj6pG*8l_5QT**}7x%KN>#MXRix-A1dyFNV@vr;_rTSL4CR!6Z@F4 z)Re3yy{=y^n6CmD9)qwOK}1<6_Il#aLI;UAzO1@kO`=YaCO0h z2{>oG+%f0Ah0@9PoevKKzVA=9tLH14KGW)dZCf0(xh^;-psNcWOu**-g11dT;+-z4 zm;mTJ<&MbaWXV@v7F7;^OAsNlx?p^}xN-sxKL|JPp9>G1U&6x~;s@d+ZghZ${yF)) z>Y7%|XInbw9M<@XspmpAezdHkUf&h*USOb?fWpWE(?K9iT>pBv8V z7Oik57lUtkzFQLCSX^RoJD(-=b9`N2u0BQL$yR*S`B;3&=>wm|2Zqn$2E%7@gW;_J?Q`3_-sA0`JWq~ty4B1rk`FHRFBIF9}eJCr~a=)nf&Q>!HGI5C;fXw zMJddEYKb-A)@m)LW*2kzy)IbsIs)o-!C{1I)X(5+4(2>+zdEm}*%iKO#xR{#y`>|v zj3BayY@n4Vf%SDxZ=<1=N#LKpZ@B)6`E3e0U(=Ka_-rY^)M53nG4m z8$rC$0p9C^-rf7(u7R$Bu7L|_Ag>GJ`|r?e-nRPPAB}L$r}ys>6(uz4&3!3L{)nW$ z@*sODSC}>imwoxwcOwR$nP-)b;J3ip_W?3E)q`fWYWg`hd`3TetQYDhOs)&fN9zh| zv%FdO_rsv}tPas?Ut71ZyidUq*U&RPx5g{*1zq%v{>AVg)YmDU4~Y*HpZMV%el2b= zd=?)VKJ%-K;jhq7EuPT%H`2H3w6>1m$LN_pdtK0Lukd9gCS_Q4n794vg8h3$MYsKX zL{oUL)dh!#(E*)f_U{pm`dD^gzS2>a`iP5k*-w_f(=M-(_5FfgbI@7MSIu{P7QSl6 zV1iY>rL)DJB*E?GK|`WB(tE4>^6{v-rU9S=?aw zEN(D-79Vna=yQqxIK2n`pBta8FE;<9;WPd8x}bVo<=z-_KGl1s;O|!#{HRbH6PuW^ z)Q1Pn3B_;vk@GFh@X#lL5ww(bVy`Fuj3vGL_lQDsrk^Nq0lb!21C45}rGJm8(Q5l) z-!FJ-!Sh;ZtFM~9d@-15IY@(<8EZG9xx&(sbu(f}*AUi`gSi>B$p%_^`Q^544yoA< zvUwfpEylM@wrDrSIO2A?zF%-i#+%!1*7pm-#h3IuZHR2H3(i^ah#MkFXmL>`uM6H0 z*_`{__FIAok<|s`+r^b%AM|@fu`iJA7YyV5dqlk+``@mCu7R$Br>%j!E{J^r=rwO! z{RmtmT=VIDzo00gQEzO22Hh9(y1B1`ZbMnFr`hwpAXZwB_oa%w?pF1~v zMn8M37wRWWu1n2FUV-d~uHg<^&j9?(!7*G<>Rzq(wRM!pQw~nS5!cW&J-5ay@C9A; zjQ+*&AJo?=oezl*6rcFv9DXfsFnkst7(Vl>i{Y=(Pc5F%`M1(H>$J9x;K%5hK6_oz zYp?L-P!?0T>M(En)dl;0LD6mBFPOr6tu8n`j1Cxc_NcX(v52(lAn{mGIBu)8V0l$# zOMCfB+0xi5k>W*$j?85QT<3+kIhdOPm#yy?^qPatYWBqAqpDW%?A}&0<_WF*Yv~A& z5oDAf=H_50>`4;b?$SI7JSadHoo|QV95N@H*HJ1hWwJ%PDMs4(0?{}0Nqpl9~# zb-`hHNp(u%2J{R)qG$S?!!KT!g)PHp@tNVXI@ZPT$$FvlIT}7$kG(GF15n}1NKDGG zu93X;x?rx6{Jj6ZplGCUtDvP?+84OBT8pXu#hksaXt$Z*VIaD-GjwDwBgpBzFgFKt zGvKweX4%r?SSec?!*tg5hRzn*dR@?~AO2ADRa3Jo>}kf<*)d#Y>1?rQ%~vt8qWse9 zf>6!+UV~O>x!nMFz4IK2J8-ng;ELZD%rf}VF_nI=3ufA7r}|8*|D}lnSC`G2e_!yn qmCbrx&^w9$tGC|ZHF7kmow>)C;YPs6DeB(kTY@P1Ty?=*JWf1+Y>#J>c=E@BQ80vr zSr{|RyAZJm^2TU6i;viZKsE+zkpx3NLKY?~8)h>E!e_|JfndWdhJm1*Q&qq2(^d8B z+tpq7-M*iz9`CE}Q>RbWId$rEcm3|Ux9hs@|Nh6n{%fyFeNX;BY5wcEmf!llS3i09 zOI`Qc2fOZL;k^4$*Zug3@%$jiUzZDP`^^W&b8Wvh?Y$iTTx5a&lI8#UmtTGK+WoG3 zR*a|mh^pPc`#1Nx5B$#ifBC;i{l~xmzyF7jT$|R=T`s9s`saP05U73Yv5rRz=BH+# zf5-HB^<3xl)xK<>I_EX}{58{O|61B7{IX`BpEZ4c?JM~{)z@qG`FBm9hd)gF#CoaO z=if7ZUcZy}sdIa*l=}APOrJOZVO^i4zWwW_&)fgLzRwch{=Dh4`{}wqOMUzAn?A4p z-}*jFeET1mKKsAsW1#vBV!|>1(e_f`{(|ZAYkzZHpLSe`8B-6=K3yOrH<`>Jziix3%xj0ZMCj73^^HYB#)zij=T6!Mq zbJ9&#(M;UQfh?N&n0#7toLOY5TEjb%AKg@(+!k-}slQp0*#`KNYy3;b@=c zKCOM$SfBsM==tuqGJ4v6Dy@}&Z2ElfyJ?^CTB)Juu|6mEth83XYV`b*|C-m+u9X^k z9_!QUX?=Ksds3F)H+ufr|4j9?{n-Agzy%G*`m{bYIbI-}vHTOG=fgiw^_=um$%p=_ z>GM+$Kaku%wNLoaq<^Nw0{W6Zb>GrGn}j{htGR#Mr+rTPvHr9`He)I2bJ9N(xPbnK(eu5xMm=A< z|Ll|ZI{#19TUFlpnZFGC8nKXC^rz-FOyW-4d9y&XK(oLFS%AgSKY#!I_w|1-4-!`j zphl&X{NXlgS?!skk0JP=*$l1qSu<=QaMcDQaO9$XL>RE*5|up z@r}hLMvupHOg{J#Pf)XYS<8?0i}A4d0QoULiw}&S#SO;K;s)bq@d5m>BkE)R13uKJ z=C3`!7&q!u%V+j^>cP?Sk&k@D^T>gg`{Nb&$KqN(a^G{flly=BKf^22`kuR~$>v8W z>aT|fIP2~`(cQcE{`*}gAM@%y_(A#m&L0eoTMkSgoeZIetmGc+2dF&R^2{S4|LK2{ zKmX^CQ-)d1<k$Zp|Jk)~+9rLJ zo>)0sbbIC5e9xsicUOa)WIj#Xz_jXM>|?>IuQ#9FuMDG2bsO6Trd0<<&X)Pi%^Sw! zm*E(0^qua2MhVi|uD&Y$cTYSaeEQ+CkBZW!CbOM!8zSx z$NahU+4~vQ-c!f?RcVwD9}Pv%R}}37{cLf}xBi86UQ0pugt#*WfAg$qepM!MW$Ntb&oZ4IxXJoq`cV?Nc|Xj8H}|@y<)TFAVQf;k{~j%ee9ex()al zo(CV{`3xZhAEL&+4)kE(h7V>Ot&y4qngyB#9)ksP_}~wvU)@jETK9Xeb@L!9rF7j_ ze=(Awr;N_zzxzUX!HHxs{!;ow(KUCUkLBo|la_ zxVx_5gQG2`N5o)L>zYe)`%jRO!w35>3>ObxqL29MC8lj)T619K$XI&F&~agGj^;*C z4^KLL7(IE&(c*)qZD3k+VC8Jlt>J^-`tXOWui`~Z+(!BAeCo4Cjbi0&na|uh#Q0(u zMxRM;&=_svD~5LXtSp*0M+QA#Q*PuU{jWs~*!N-i!RD?ZG@5E4<6urVFH2s8Ly2@7 z=1n=E8+fQoS~XD=}9p@$P`pV>`}qF$%`FRH!}|7Tu#s>2kuIuPxm>q zZLjAmiuQqiwm4=nJ~*eKLzi}@U@<;;X$m%cup8G~6k3wyx3~L3f)C;?{Fz&@6D5EWqL@@=f&J zspSuL4kuMR;NvgIAJj+OTmOPIaf@2?Ymxd#6UqLB02siZ~ROzM&J5;cPzfW-Ie7#$KyFBAN+_XsM)-%zn;-s=^VPeWKd8?nH>39@`@rr)P2U^dpcCjJq%?dm7@}3p0?h)=0*~1OIec(Q z{)_GdUuT{S8D00=U(D#n=u8gFe_{Nkbe5kI%MtZ`ksFwPw|i15(R+DZe=iaK%a=dM z>~Jo+ez573^UmZmeHs6y(3xJ04tytG8cXO);v0)gjBfi~B0uI=J@h&@Ut9SVA5{4) ze#Y{_f9d&yOZ>;#J=p)${HK~F)mQx6~1rz@SE zP$s*wEq{<~k>;M_xSi+>1a+jFKY~?k#57hDTjm4R_YQD3wkMC z)kJ%#ZpHW@Q&2nJqk?mj7dxhVsU3IaQ^$Ppbk{xmQP^6(I7rUd6zwDQv&Aus@xeI- z9X_}-1&i^)OH;7ngYx`?5`~s@`AO{D(|sYq2bbm#B7}%OS_Yj!_hdwfaJIb4?Q7es z?S97=ddnZQ)@#Sj0?h(<$pS2nBHu*com&2&ynF;ZAW!3=IDvb0l}B9t9pt1`qU$@5 z{v<$LSRN3gvpgV1hrV&YEZ?V;&hmg5o!Q}BbbW9+<-9ZbOkc)-DRib6qi=n_I~L#G z7RT3&oVYN0Jf36n!H;-?n$6c*evBXEVetX-V}2GN7(a^}jGx5~#?Rsd_+dxX$NUF; zs87vbdwwx))Tfru?9=c;zjAboa8j`EIw6iH_3*)#KPXmh`Gdi=;DDA-NVj1fDu;v5R{msNyjb;F1SMXFpu5_QfMcJ<_#jhI$FoNT=O!=42i;3; z!0l8WZJ+!w=FKx*clDgJtNWwpYl`*}`jPqR`*2?{bLyoYnY?0ra85yo5AICCVtnw@ z6m0mQ!3U$zk}kiU{W@lX4=&9gLJp{{HK~kE~!Qf%=!yM*fa{HWjPJYvE{B6R-S4#+{k50zY<60dT#^z{l z1oiMiliQc*X4){ERkf9~MYo0zdh^2{vc4+spP?l4sm~fUij}ivK1*O2_f9uLYUw`k zbJF;-`QWLZuPJ(2xKs?-_bXwTIoL}a+~F@gU6AVLU2CGK^gk0E6hMEJFzc>#7`U=%5P zw({(tpM8!?DZSx?u?5?Cvp}=JU9kX*qsTYWcc+#==y6iD1M)PGKiJDVfqv#EF16@i z6v3~@!sVRh0Wmtu17dVG?`%K6l+N;i7@gVST=ZJ=TPla?TPkO7{7f%KFMW=S`H#i7 zw`Gl;BY%+13&xN5gZdahLI?C^@d5HO&XFttcMS_{6Vp6!v}+N!4Gqoi^=U9_U>E$pk0;o z$1Q)b>tP}FGx(aLIghG`_ukd~L4Bt?ID@%A=|1qsg#Pi7q0{pfJm^p~a z&;JP4MY;_!MmZdOwo(_Tg!ywY$1;Wj0>1g2tqa85yo5AICCVtnw@6m0mQ!3U$zk}kiU-4_yk@Y5l1T=|;*{vh%N zaWBBV4)h>Ks)i4awrEGq0?h)=0*}oCIehSk(mV1;biemnHxHsxO4t4NJDEQyFFju$ zAEyT^9V*eUMIwH}cMvWIEDwm$SsoChv-xHF`K5H02gK;i4(FoRn%`16Oy5#Dd*f$% zF*@*|E-FjtOX6E;yt4f+kstG`8hRa@m#zGW=PW+N^1;vI1LJ3LgYmPt!T4Exi1}g9 zYdOfp&vWsgYJQ>bspT_!HhfTLAlfT;1pjc5c|>sh_3*)#KPU!m_@MKu(GPR@pvmnU z_U?fXnzkTmU1jBn@Ar_R>tM1L+z9I7NhY^1(ap4BIIC(aXNztvf6$vB{*d)mdH)P0 znNNMzs8Ot(E%R9d!{{@~%{cgEANcTDSu}5s40^t%+{i`xUyB&9@5Azg&0RxiG}S=H z!JKYhmb~zW66rR~n{p_8wpJI&M}30>spEMwO-^w=cLSL;_>*FMkSVB!*rS4TlNaNI zx|yL5k)b4x*}WxKe9r9I>-mbJeW0H$j#-Qk&MD~d!JR2sj1OL#f(;++#`PA3mSp*9 z?A+6RA;AZi<`0Gtf_uTBlMO9Cte9A{JkI3ywe8jR{eKI+`#~- z7@g$-F*@{3x_%H|Fyn?oIEJDiJNYko`RFnvqq?2Vu4#pqj~?~cW{(s&h* z=a_u(Bc7mU^Rkw|3kBn0@d5HtQTYbLrvcr8L}U8GR^GpMjG_LmMt*M9K_`3f867a zbaNh|-(jpAF1=1S!7G#-BSXf}<8OTMuf?Z>b!nZ>gNU@iV;`9r(`Rm*HRueMx*{af#7wzf0uD{5pKSj?K$f ze#O^RK8p{reDJgQ!1!6*VEimTFn$&vVtzHH>bt~$oZTN2|EcB|`kq=ovuDExbq1on za!2r+lK!t_nf$4T59-sE&Q2(kU0L1tI^dJN;8|Rg&S*XA^)Ia*k za5#H#^RhO-@QnPq{kHsh=ev5ImS22FXbm3>hQUna@IjN?H+V_QA51-pQCj}su~lCW zAJpfGP*PtV+rYD`HhnCJXl1%#KrsxX?{p@Tru)D@75L;!SjECD=WB}gfquk*eIJ6f zk?h5WFdeF-t2v0t%Nk#TBi)91Qw|58t<)tR6!cQMs)_be-HP!+rl5AbM+N65FLq4# zQaf(Rr;hpHY5C=@kHXenr{`;m_7VEo;+Vzw;GBXEAKaOO#rWW*DcJDAj>gV(`AO{D z(|sYq2l1A13-f5%`n(vBYG_O$T%%fo6fb zWC0dOk*}fePAz{>UOs{ykf-rboWQ-F%H8Y6KVwhbq7q%-f%FUIG#^WCxd_O>{FNxpMDo@4UCk9dNb z&DUCftY3_W#Rtfb`B{8m{48!Teik%@}M{Hjk7h=Bv=cr5R z4IhN%THP$rEO6H>kc*?5PoewCF8@M6u#!AM-5<{J>wf!P%pW|+H*LI@$)l`Azm<26 zr!((0EDwm$SsoChvw39u`K5H02gK;i4(FoRn%`16Oy5#Dd*f$%F?#89oaJ8<-%8_E zsr;BbL zF5Lpd%t1`vM&tM*-G+H{Ly_Mf?AGcM>pymx%-e+3jX>sdGMOVsF+Ru?RQV1c+?j%N zlNURtZf591WGJa)e((9N`zEr4giFs?6zv23Y;nwDd~i-dhY#*d!D4*y(iCj?AOf^3 zqbRhb%Wr4*g#;f&WVrG%f#we)gdkMnUI)4jDJwsLpd#$PfE8Jb?(o5P{=kb4^@pCc zJuN?e<7b|?*4UVwhG{OJlg8OB&@6CS7GQA{IWqdb*K!`^MK{<1xh2SX?BzX1Kc^Iz zTJ$f9;MZf}a?Wy>7@g%VF*@{3x_%J7=Yye;&T^L+o!Q}B^jh;#0*}Saf$M`WG79Su#=4bJN@w2$W_?KXsIwp*t z#RtfT9Z?_iAMl|*HGl2-#kf(QT0XPS$uQ0P_wUbb$@zWCadT7s_3!{*+}+dNb-NEf zyn_!c>kdpGojd~ckdkbhVm}oOQC$zy)M%x%AByW2zf|SE6BVCE2FJ?U^pR*jb}z!A z`Gh!j+P)KYw8iv@7)-65ExGjp-W;acavrm0Tuf{^kJESuUvma@tG*tlc~^5D^_}i8 zdR)49{V{3$_{h-d`HFIoYxKVsnVP;2uWyq%3yr4I!%4}-7%+HQ<2^XiZE`1akl#vO z&>!jp4y2Yb^f)cmtr*i}3TnrDRB&$cVodYrqJz1`r;fR^q^n{~b522rY3@wHVodYW z6fDLxFHOOcRK} z2YD^JO!{IDbHYf&iYSLfodJ-^Tsb*X%|PD}06 z@Ik+FlF$j13=1o&8$K8rBsp!rnFy04z7-mB`%mC)_@K#=Ly&|)SJn+5oMJKXHD}I- z4`#h8hGF!XIz3-eZsZ#MujO&!gOP42KDbgBuf_QHW<2b~2YZ}O z{85Rx2PX~wieh|_DX8)tKDaXlb2kXDde_B{c`HijLu4qaV}4(fBJYn$k)58eDB1`5 z+2WYR_~4v^4jHd>DSU>PTy1a%jEZBgN6^L-@O4m4sj#)6NbMqJFn$O zzZg%$2fam@J+GxXx4vre*PdV8k5HG&XY03A--Zu*ze;Wi*qijt$=`+#CMJmp4IhL- z65k39x$R%@Hhi$*gYchC_0@Q__*RcI^)vXIqq%t3@&{ob)G-XB&lopoj5hK2xDT9* zF&Ms|f4ax*JOY{QgKoHZLw#eejeXKIHGFVx@?yu-ms)*@3?&69b_Sm{d@x4$=4Nn@ z0BFMpyK%i;+I^uqJ_y{f;e!alt!@@*7HAeYiv=1!I5j)Nr?AhDeOTaw`m^BfN35q} z+|PyAptJp3w$IP#EDwm$p>M1f!~06<%+8F?>~Jpnspp-^XZkY!C3N5+t`>j(@%Xqp zPCxN;Hl9<{fnSUR^hZnSz{{AQvphjYkNZ6)AN+_XsM&n2<%fMR9u^-UKjvrgf$=kY zGJX~}7(a^-;D;SiGe0~Rf9?5&o~TRZ*RoH;2mQ*K?3F92;e&}uyrtUri+Vexe~H05 zM$c{kg16y=4IfNBYz5_NyhePh$C>&We9h4sJ_yrH>KKNZ`;I(^q3!Hj4s$UE3i|mU zUm7CaQhZQ#t5EdW1w{^fbBse@;~s4IEkkksAX8A~50htmSb1Da!MVwc9n)=EjLBsw zK6oR)V0QJ~sF9wpDcVQqN9L#RLmWxw=*Z+1>{j0}>Tw){buB=N1#klX$RZ^H*0J_!HWR9}r(i*NNfQ$K^RIhxzfZ~23; z59%0(xwL)YT#SKke*POi=oUi52jLb+>PqNR!w2L1!Ak=`8$Q_Z!L9>72;8vYgGb_L zYi<^37HAeYtpyrBIJGaur|x&%)stO^eOTaw2l*!c>+!={gRolkTY34){T>|K=Vx@5 z2gK+MH(_{RDV^Dw(U~32MXxo#rE-|QrE)C)d%J?(&7_X;LHABKLTYKAh-LxV2l4Ee zdQ7^=pJ*SUADNoIUzw(ri!tcX&wuDdh>>p2BPQQ3x>gr-h!v}Y!;N0ZJj;Wg&`VbjP>X?sS?z+!^2JKy^=PQc#fqu3)W-&fEr=Ux( z+nIvJ`GXoYU|E@%$qYILzxRCCee;!Z&h&gmsWpQQA4GtbNr*zrWb%g4vZMRL>ij{3 z5QIwT1jh{c;D=<-bxmRW+K`3!Tb!dVr9br)u55L)K(j!zz}>PyE{^_CRMh=st#!Zm zI)fLK(sf_`#f<3~oymXqh3I`W$YlJb^oOEr?lmHoBW7{sAnz#do*vFo)uLaEK>UO+ zWNXdr!0109dNF#e@6h*yynWa{Kch1{Gy1g*AZLej(QD0bsT`(nshqv>GrbtS^f}J* zFNtp~E-`wk{FuL!qT^!ovXvk4oW+M&KKNODVEim@Fn$&v7(a^-F+c2iEeE-{aW4K- z%`fylwR~pJh7altWbTdFoAk}e-+K6+2Onz4C0n_tN?7t_C^De44g_Y1P5l$AVQ~Z$9;T zB9ufo(*~YZwUx7FK6CSi0mU$kK9k&_G1|n}ec;1qWzoDjGU)l5aw8Y%e=TCbz7NY! z^qdxF-63dC+vIFcH!n+GghPpR8|F#9PLdj|ne@`}a%Xne$CNpM?;D``U1?Lud(g!v|Ny)^7#EA`n5>K@59*+m>n3M^4qpr^lK4XGQSqzvEx}vKNjCuTw?UN-(&K@k9dNb*>f#FY=iNz_yGAa zKZ_5HpT!NvzXTuDF=6~HK0rR~i27Qt&H2^2_-oHE^hAAX`OKaT9~4KEl7vp|yZYwj zZ#{fapRW3``^m1X!v{Z|biRsU`cQ3q2+^*`?)AiJ^-Qm|RhSG!-CTGP&_X&abU9gKZc_f?E1hGF!X02X1_CrplnH}Cp zgZ|ed?%4OiMPYN-5E@N2ka3WUF=+F$dsJ|4@?yul6(tViTqXcT_kFol+#eGR-8n2@P-`FPXNzMN#9PLdj|I0OzYfoXkMInJ5Q2LFbOJsY+MhI^L@0km`8B!^e65=bQDJo5SAQ|$)l)`ia#;Qg z<1eMN{FGRZsPBv1zmOsilB+AxdwE>P_diz4SBv-@M>Kh^v~-%|N({g&FZ;e$E@5kBAuez(&9 zbu5!V_3%M`x>9csWwI;l@IidC7aS{V(?=)W^$??7kKOBuKMNJuhPvT{gDIkei4{#7 zqv!UYz?;KdOm5%cCBO$wo9Vgy(8`gq^pK$A!q^a#|TV&!a^&z!Gfd@&58?{p@Tru)D@75L;!u#7Ov`I@4A zpdVQfeIJ&ek?h5~)iMO_q^mjIyexSU2qn^OScl5t;IoywKt5{drRS<9=%u<9}op^TE?y_v}Yu>#o!DHAVXf{cLf}VtjB;L5C0SOu=G&@X{1) z`GXyeo$2zE*tw_sLV^$CE#u0^1e!mH5F+|$8FT_Y;Diky^!90gn+2K$ngt%W1#72j%4>*a07Zc_=n=ucz{e>wXYAp14YMeFw_@z8lK}Vsw@V#OTmBR*UWD zm(p1t5Ti3YoQtlnHm96-CZFlc_)kqg$fND8z86Qu(q9j4S}Q$=8#28Z-QpLv>!tK# z@$GF9T9WS^_j^n}_z_P~v-w)f58GfoEIvSf%+KNj<7aV$@w2$W_*r}aKkSJ5nE!we z^{M%5&o9P}x>UYhr4>?~oIfBW2nzmK*I9zmw{6T%E(`SuP(tY4xmB#QJ zOpZs-R}}37{fGhkJ}kdPnzL>Q2$_CzF$Qd2))-17-G+Hn4hNsD)CK*ahF*HEYJy&> zTQNS!6x5FQsNme>#rU9msSUWDs-x|CgBWzXd8X^Go`bFBEm+Ri6zwDQv&Aus@xeI- z9X_}-1&i^)OH**}`OGb4@1moR>HfiC3^x-Obu+lLZ-^~feo<(d=r)9w9o-iad~j+0 zAVLW41<(ofh7XPo-;SCEngyB#&R~HYKB)N=x}U7I?)P370u zJAJk2xAH9Xw0laj(s>>b%MW6CK#b1jk?rS~(per5qcc04i(YGfOXVR=Z>90dj%SJdm|w@M*Rgro%8z)?;zKMS{472&eikSypZM{^!k5$~1v&rnid9oxXOs@7)~6w#$O z$D4J7tQdxI?{sqS4JF+Neoh)+Hap{bzNYA9;ZiYR--qd%%$dq{)*ULPOv>CIx0f}J zFVbz8H#d|ge#T0eKq8A3VrA z%5CyOB9Fe6=+`nA`kmx)VR=A|&hmg59s0)oviu;deATqAna1&&Gvp6m+V4!wK}>%B8 zj1OL#f+fo@3N7jKyX(I{h~Fh_zdwi&-0Eh5W`Smbvsj?vgHyA!{b%fZWBUR4Ap1VI zTJ&BX*Y!IG;==a%8J+F(GdlE*`(^w2rF3RzMrU?77roZ}mdauJmddgG`b?_D)$)}u z?DsTt->1s(i&8q%i_wAa_>qr)m(qckF+V>SK4|A<)N0I&MEpU0j2|+fFN+Vc-N4V{ z1LJ4*Wc(~{Fn$&vzz@5iKIT8*Lw#!gWAlY^pguJ}Tc@S=Z1|vGX}U!?DPdDGp$Ddh z4^FI=Ik|aRi7)84nB9I`{=D;DJx|Loz9Y1T4+g`)-*T9X!S05=`-Tsu9>pjPAAEdx zufYHlUo~xPs+Q5ufDc~U_sGrdar;;^VoH&2!@LdnAih&>+3Zj*eO5z}!`>X@(AT&J z8-B}Bj1MveRsQfLfVPK~$F&rko4gnwocnf4r`yiHezO=KoKx^le81?O|NX&RS!ep* z63PTa+atnTvizdZGSO`aE%+`@HNeVPs-XqpMZ#m>hmUO~A@WG=c)C(b>NJsp(AL zQ}@f{Gkl?x&h%n*;1{t!ETseg!n%&-G<@*=_ti!XAM~C9ze4;+eat_>hnlS;CjZp@ zY@M?4Fnt?7=>3GgU&jF^oHu-s7-k?hd=REcd@D5M_MgDp@WHMF_GxiF*mO;8<%peo z$WWWZ?vCd6)_87Y%OCWXgUxcjYA`@&O`8vD+Asy{>V^*<&9TeH7#Q2n-?(8P?QswD zrX0f_H!j{#>$3=o9QNiIhrT|t$KCM3Zk)V1_^jcBQ@@%&tMmhl#rcDCGq^_pwB-+) zigr8uVLv z@yY#;8_NS?bhgjW=nOYucwZ@<*_qLq9nM9sHNT~Dn7*ZQEdP7KakW-D`#sI9Kg*k? zjwvpOLORon(ScvY{Vt{N6(6+oVs(RFz?o1VskNFSyP@kIr*nD9es87yM)@i9d8$Re)P7(^SH;IK6)eRqv43eBSd=Mr{d@D5M z_U^%(!(3YaAS}ABZunr=!*c3p@HIzs@s4AnrM_w~zyW6h-fP-0oOSgX@Im)ZC->e^ z(tTjf0W=O!=CAJmsTedr7&b<9VS&;R+)puOw#d_~bd z(9agfEY2UCQ_#U@J5#V2AH4IwKdA3$y1x+0#6>SXe=rIy6WxZ;vZMRL>ij{35QIwT zgx?Ph&-7w+;1`2mhJz*aCGm~LB}TXXE|DMe>+tnD zHZNQG5zkqCh~6??k_3%M`y3*MRWwI-)yC#QM(6p^KeRR@Y4{6%<*u9?kvrvI;sDJd6;c)h# z;e#;G#JV6#o!kBeZw?>qzc5@pcnL5U(>5@zIk0kMEInlCxG*+Hb0esSCmlYFp1l9r zd^6KFFs(VTa<=H!@&~>3;SX6~9bUB3`P65P8pX=lGM~A1i1EcRjK0&ENSf{g|5WzC zzXZz&vz)If+6VfPrPlXh`5DPxYzWh#O1hfU&C41$>?7TrNL`1@;r6&!>JkqMdMRDi zM0=@j#rPmoP&?kEf^(A>JEq&rkeAy~QpbGobl2fa0F_D4*A(p|^s~h=i}ArZ1s%Gy zGX;zB!An!HIDhcc6f9YOQD{k*pTy2R-4_yk5N{b*J|?^r?$IxWXU;eAe1;Gr`e+$+ z0zK3XAN2NVf13rG1)2pOw*_+eppF6gCi?Dl^<+A#Qu^B>;*+TuhY#lHOg_thVf>|Z zmY)JS$m@70y0}}PJmR`9bcl7UMAvtq-1llSJ1{!S17dXO8>_|k^GoT>&Wz6Na4x#O z+MIIUnS7=%<6lDG^815J0rzoABP$s*w4j;rXgMedYZTje>yB=b+>#=)1@n@j|+fX-ra4UL7Z_E02>;Cy$g}$MS#}o#g>BI-6g%pI=I6c|eTL>~Jo6t@$mL z!}KkcQ;T2UfZXT#tn=$}A)V>P=%vqbmVZfnD~(sB@?(BAnU0Ii%T|8H2UR|c53zjk zv-rUHS=?a!EN(D<79V1M*mH^hs9hcx|EcB|<1dxZ)@i9d8$RfLD7jT*Z_+m>f9v6c zEq_pq`|2kW3wLv$Paik6)9XM9Gw4t6P0qklw@!R0h-dWN{u6j}_@K${bK2M(JJYsF zDJw_D(nFYz3uALMH-dV2lF98$bTe%j&Z^qV*`iy^AN1yjKV*GX-ZMi<=2M?FY7{GH z%Y5e6A;uTOFz%ghj6Uf;@N?4mve_Be^EE{;3zv!k`+g-#F{hiKzj1t#Zo|B}q3HLE zuGJ;hf9z6Yim2ub{0ZmBKB-cS4>AR{W4DRFGX>`+FLuniZ>My+eee0M!`GW`{2$i_k zf!^{5ov*h)%>vB=%>w7LKn@?&u^`_>-{-C!Av*$5?!#trb<*z-z7zgT8%V+vFe9-$9-J8ThjOu#$V9OsA(>8oC_!s;z zhq<);!DtZ{p0@nKDHa1?b7pjCP(8fYq(G4P>MaN5%LcQ&2nJqk?mj7vqC1e{g5nXT|v7 z+zjq9y{;G^yfg(%mR}TFQhZQzukUjHV8|QnTK?d0e`*KK0?h)=0_U(m!w08Ur}z}X z2lXRx*Mh0Ur562G9tYfS7DpYheSSt~-xJ8_z(b>M<>v<6yI4Xlr87G-I@4VNdwbEHWY|hUa9#KkXdNDfi9XD|EXDJbNW;tKItN5UMryC))bRSrgWbA`@_Dee8c{8>45&C&t_+X@4iVv>U zC028^pRT(e&G09j0~oA^4>AR{V}}p!Ou^g@0>+8)L4C>7hsaP;$9(j1*M0soXzw~b zUs1FV^s~h=i}MHP6m;;}&J--h2k(6T;9bTCqtKErzn$F|lKesZiounS3Af?3Vs))()nFuLxmx9=DA zkHokYTGQ#Ha*nS1)$Th7EVCT5?+Ijd_C0}&&gPNr=a74bJ)8dFtjfuF1m_f`sidVJ%s4EFg8bXBj6ZXZfhIY=X5jQ{h8=y+Ay3|wUx6) zw}uaT^UuwvK2L;_%%^Ds&#KzW*)pFwU&Vl880ONxM{Z6xKYt@w7wI<4n{qh#4BsgS zJLVj^D<)^w+*z|{%aJp8_SoDpIYP=+E8{O;EnD`4Y+0-N z6I!%w+oEkVe?r6Vi5>iv5?d!W?3h@;W=zhmU1M^G&>64zCMUDH@V3Hgopuf4*9{Le-Fx6{^ODR8DN$v0aCd{~jr%LWg!O z6B~Cb*RW0E@3&C@zh9{T&s)g+=ex?bYtp%OVn|5gc5T`uw(S&>DK=+pj+|Mu=8TES z8J9DAuI#bd<1z;Sd4KhD1TzLpwr$a=MZ?zq_W$|${;n-LHTPGp?r-0seImXbY;4xp9JzC4jf?&FXJp4es+8EdW1_!lhjwlJWy+QDS14cU_jiVLYJvCqKbJ2q zM@){mY#|}hxV}w8QiQ}(W*P>cng8C1|IgX4M7WBubh<{t~ zKd-5f9|h(3F9pB<^Exy{iBB7^#;1z^^YtV#J8|Gxh3zyIGp|L5m?E)>j=l)x1D z_xs%HNeLB-{rmcV`~Ls_{Xf?yz9rsE_gnv7k7|$mCe(=dfBiY#5^|JHN=W_a-|ySA zJSm~X*`EKu?-zwPM*ewozhg-ad^8Q=LqdPQNZK4aGGyeRHC-X3LddI-VQfgg#g)hMRJp87%O|C&Qa7oVR7}bt<&om0N>WQ{ zg0xk7D0$@$@-|slS}50)(&}-wj&@5Mpyx2|8#~OE));%FGuhqZdF_q%4+^9W>mDIT zZ3ySWS_F>!I(frAPo2H?0c*E;)ew#9`fAP8dZ{7mL?xiCmMh4i@)D_rWJov2eA1tE zB2`E!QUV_}NqaJj93;O;L1~zDNy;UUlwZhol&eZ>^_4nS%cS4XXBmUd7FG?rfiu9J z=DFgH@(&J_4BHVgDC|ifoqwJ;(c^WW*!!(L=4s=-9-|M^9;@ZmBT5P7vfN01i?how zC6l?NHt~^X;t6q;I9?nj_QRj^#m(Xa(I6$saB_yYQXlDtR6t%WM=Q&e-0BInxyI=i z_1Q)*vyGKx&v2HzFFaAc!Ty}VCgBBxoBWx5t37SqaObIY#=MJTr_3F_TzZ94(#_y`&8}Kr&0CrB6~f z`Lo%2PQ}ekJvgLZne7J-HwziP^+2!ggVh&`2mOWELWXppZ!@D%2H*2%Ck+LZsML zJT8WjQRD-uhbz!fek}J=Xmz>TSPR!*=#PwZ=2h#ZUC15aIp@vi?-wlL-{&pvdG0K* z+ghc~Y(`nVqqb4y)ON}hxs<$HDj=O8Rml@^keE@tCJYt|35;-;-^@?rhw(l6ZhU`! z62F$e%BK;E;5}Rr!o;CsvRH-eBSocSQdRk~+#Tn?P3@%>(oKUi16HKn$ywzpIQz+g zHon`Qs&0sL#u{$+H-_u8w9~4H^S&gq$OopHxDADGyXKsZZ63T3@}c(aLOW zO|&04ah^rq75<6d5YG@N#x|^5###M^W@x$9zPRQEc&+$QcJXY+OV#r%7|rm$bgBd!oLk}af|bWv&})5>b4 zk*aAowR8F*3Rr)23l5;E1l<8_SEuW5~m}RUX_93T$C#{e640XKrd2^F7OJAYwS3fHml}_?; zDVH>sgp#)6J>f6mJ3o@o$Y1A%aK$-}yTYzuN3b2)CTv}{4%>+B%1&W7vyWLn*N9un zec`I`d-lo@&M@;$xkMUX~Yh=+dcTS{A{i$_l{kTV`O6~_BykTS;S0cCNh(l zsmx;L0CS&F*y8LU_9W|aow@5=HU1P|Rk$Z~5k<0{RFu*p0=G~M^{skQ+o~Tk-kW*t z`OafkbT(L}%=AVMJ*SpWt)tA6uVA%xCdb5ZalDX9=)*Jo-&`zrlO4kr#gQ*EOPD04 z0aK2NWn!2dOhKkRlgJEZHZqTy0NaY)#uBb0_moTIAMsrTPF#(vpG=lYwPjY>t&CIK zX(jbaMo)9C72_0l2ipPbl5tqytZh?|Dk+o#a(ihT;Yp&nL&zXZ;}w1$mkalL0Goq- z$82KyGL@Kg49mQwZ_?N3Tl53^3$5Z^)MutJXBd^O$8N&;59LDn!MrW36iSQV#o45S z^j+F0H&zO$lJ-*jpr;VE#Wv{gx}1S z;~ucX*zD{}W+~GO$4SZDq<7K_>GAYvdK~>Xy^P*ZKc;o2I5Utr#zAwRb9`MkyuafjIM2q=L9e zNGWvUA978&uk1uNANzz^$kb!}%u{+BJ(m89u0t263(|$@vUCHwD?O7wLI0rhFoSXa zLAEFRkgd*LT=QCrq`ME7@MfL-;f@#6H%x!uJ-GweqXQ2(6qQ6nUD28_FTzD@- z={@v!x&$+dxyR&V7qAjHo(t#K^EHG}ajDpln9>Ppj9ftpS5sJ8QAKn7^24<~}{2Zb|2)Svr}zMD3$? z;^QQBi~2-4bP2jA?g!0OWacwpnMUj>wlX4dD_#?J2z5n;oF_?ANtq~*l=bQoZI^!4 zC~P&f7n}8sbh@G0YMfGA?j~(OMoBLw3Fr76{CqB)TY|m(5LYx0^O{~sx5lwU=rhzh zY8o|y8bl4JrcleM{nQgmr;E{p>9e%Wv}6u5>DfuF#?9d}^XK`Vf>%5*PC?e;CM%Qd?1WYwWgU?X~&^xjeI6UK&bvirmn9< z+39SMTh5i|Kk>7$?isS543^5ve&wa|P<^SuY=KC#?5E+c=1PZF|=udwS{O6lb9@&#qHx<|XK=QR6UZ;j=8Z>_aDN|`U8kX{o% zsVhzrUhxGG<5X@c8^-QonjyCBq&v}(^b=|g)sw1(Gq)+03Z+ux_#RyU2GnS*z0}zK zM2R=Wsid0Zli$mSl-24c?SO8XJ+0fu0)4R7Ngb`s zkq=6*NI0o2P8MGBh51E)&OONPW12ENvzP8nXQE$G8>oIb_w1CH5~!5;%~C#GiF(v1 z96co>!8pXdyv!^n1>2eZ$@WFfag=W>gp1e2v81l#kzdQ}l^N<{?Vuip8uPZXP#>#x zR);H#<zlG6`zOxNbSNdYe*HK(o-g`JdZy! zQiZYdr&7l$maa%oqhHg-nFS2R_G43^1`6Yk@f~pPkHl%DAZLvN{EM{ei?vB}pG~D=No&{8la-x0=n(-eCG5uiT&~;mm04^%+zrsv;GK`yHUd zsSH%XKdWvPb(8YZjp-HiH@XtCk;zW@v*Tm=yZmq=LHr`FBu%9#`ICG=S*LE*uISm# zqgF=qn!a6Iq3%W3@L9?rwIF|^cFiL6L;Y5fJBA(i7MVPr`ADzEijJn=P&=pzR7a{7 zRh){)ek+Zu-kq9>Gyh8ErTfqaX@hCaoMUpcYuGH@Hm(MrT39I56g5;?eWfC@raV-R zs+Y8PdR_B}Rn63lyV^k#^hjf^$XeNRA zf$Y|ej;AFY{}8p7nomu~U06(Qqb?xQhtV~$;x5oGve8~9iXF}}+(^{gJNX94Gn>V> zM3T-+W96nwUNxImQEzQ*H^F zpT$L_j%3IudHY;+YIg6iz zDF0Fzf;jtv%#mu!it<7^t?t!s=!)6ED(#Fz|CH8vjOya6Vk!x8UuiE%Lu!d@kYoGv zFVQQc;%2dh+1H3)&9U}B;V5(H0XSYmWR-e!bKH%w^afN|ERH>#Ig9FIAZq;T$geH= zU;F~0gm_&XMiQjA(rURi`uZ5uwUv!Q=3VQU^VwQqwl+%X6}3ugGjy!SBvGnPR-v+L zB%DOdIlxun9;1HGh01C<(}5{~y`M~B-Dxt}q_9 zDSLY{dL}K4 zT2mP&AC^L~>v#UCsAXXgFQUrG&)sJyv*lUB-eNZ3-nM6IqlzrSltzWygz1HheuR0& zWM;dt`&chJinplg-t+whkGNH=MBb9=QiA+OK8z?gRO_e@Fc#ptw{qHfraS5E8|F%5 zwmusXZ>{nHXWvpf2|_Vg{2;Uu-tpbhP0T?L^_HE-CbC)B6zpvrYZZ<-jhTUbvV}R$ zyk#8h%;D^HHjL|y?zR?xmah)3&`mVSR@Bo!aL?;1aVo7PBfF(EBdk`aryXx$_k!KY z%42#BLwB@{Y76uew?IkeVBfbB?+OjjN%i7oT>plgh}bukZOz6b?~2$5-;4Puw03 zvG(NCt;E(h9g$+WScvP%Iev%1NcKN3Kw^CkpHCq3!e=#yxf7v^o zBA&UvMV{R53A?M+#4K)P)^lr3)TzpSIZmD+eIm`tL-3dfLI;5rmh+YP@7z`{i7Sg* zGd1^|y}@2V|9p@A%qm48_>JJN}>iS^hxuAk6;s8MQjWs}UxU8QHF0l6!-7QYH(g`C1o zeh{CRPsyLaar$zJTy=Ev6}SdmCvF0_1N6YlCxW3+LKEc?Vw7l6_f>XYPlyWtD!d&6I&`7)><|ErkVUUY< zvPapdbXGH`G*{Bv}SWrV3%<+;U?=o?#+o1~_6 zM`|ReRF>k7v!Irn^hL%Db3dZH3ublK+rb|l77-Zd3wRH?eViONXQeV(BcK=7{#G9= zC6#@0RuGhe*niE@)ov3TiL!WJSb}v>PKXtv1&VpPji4rKBN=A}_?fprZrD_F@OIqu5CtEG_~$ z{VrxF9Ze^$k=erM z1j7THeVx6U=e#q?o@tFYHyH2qtom^6ky=T;t~6HO%7f&9d_?Ms%Ig`~1V)?)K3st0 zLM@Pi6v4`zOg4j0X28EVBf0q3U%^S8iH$S<*;k4vY)L%&P5Tv+ZZZ<0fl3d&3+t=d6-05x3{soIi20n zo?~9(&l^}0%oTn#qGR;jbd{nyM63;q2rltw@?G$Zb-Oz)?1ok^R6I99s>f?z)IRD< zrI!+_OhF8KD9y%|O(&&6-*JPS1Czc(z7SO^EcKH1N<6skdf8D%D4}XE^`|;V%cVco zQ9FUqm9dLCjoiVW<6hoh1!vwiJWph)Xg#t@__*LV|9GE*l|R(!X}7o9niGsex~R9( z4yZZQRZ6t7RL&!xmAXh_(lxO7Mx-FR4vwTm9U_rTq%;{o_L5Mkgfv(B3O0O3E}|Sz zDyp~C&YGj&*2ftgvDz!y-JLn^WzTnSL;sOL(J&3_z_akoVSNHGd;`3+XQwmK9$@u1 zCnM^m0Z~{AZJ;AGiKg;n99fc9lR5+(K%52^U0p0B=ELt&VncD5xJ`U7=EQrrL*nob z6nUbYR++3ssq3LnDEb-D@$qJFYoNWvx#gzzHuhcg=LvocyA*LT%oiNyfA1aTN$1|Q zH(6`V9mXwP&`WC5QESyv4$8UZ^&pq~NOkfQ!6@ufp)*|&+`Wa)3x!XEtGj1-=B=0+4^T5yGi}2&Yh(KT8 zPtPp3w4>O`=4<1Z9;G)%PyJe{h`v^rhe^N4Kt!7b*y%6O8MHyn=Y{wD9sUA;k$=jk z5~5K5j~C8^jwgwC#8T*$3t$zLlkdvy6kR<7I$i+%`d36**3RX$aQAv_Uw3~*@MqZ7 zKo0*TujM)5bhC?Cab`ZFs@_Z6sis!TD(mF5a%*tQn&gJq6g|dN#MyVK)`s#;k@4~& z-sc8WYs4oZyS(Ca2>pfYh_s8uAeli7X{}UDz6v^@O}(kk)q3c~jZ$W1tDim5dEyrJ z&i7RhFkxu}O?-zu#oeFwPHVC`5k2Kz?DI@&XJx1C%59{xq!=pf1XTD9gkStp}=S3$=<*HzF?StnD-^tdVWOtcg7Q))-!6g)fw2?KDm!{h2$k`#RzdJI=f?hOWxrx zaMO{?OLAGzUmKj4%ZmSR$xY%;avH9}W^j^$!bgyjui`|KMLLLBAEBI4#;dh)_lcpI z>8;{+l5^9I_dfE~4b=7R^TfK>?73D)vo4rrKW)Bx9`#K%c{28NNwQ8%C(aZC!aDTS zuee!UT`r3I$ev?&u!}+EmZGXT%f1C2ug(39>LQk($frOq{wVYid9oIK_=B`WuBy1| zV|9ZzQ6FSXHdk98?PBiVp0d7i$gh%TtP^Q}Fs~aY^i$d=)ly3;qd@36sR7w7M&sBL zcx?t$6&<*A=&aVTeNa&)pqk6U#}}TJn&UpGr~*ImopAh7P$y22UQ!0E zz6D^ESu{!isjH^Xs%X!3ez+^VcYHrQ?c9&{46BV<#VC&4lB6z1Mxo=_A7H2T;_d7OaCLqQ!-NPGxd zQ&tL*56fee+Bo~59{oodnPoq7dU}R>=eX&enqj!VL?n6iS7=3egbnSDQr%Wz(2+qGecZ4g& zU&h@h;$bm~#GsovBac_Qs#UZKs59D{D^Oqca(j5@IT`Is$Y`VWq1tG5k#ZKQj7O?Q z#)?;k7-2kW*g?=^=Hk3xqi?B&4(LBM;6g3pR%u}71`K_*qxhXvPoI_SWGuFtc=Yl3wL+K;W zm-dsdVoq^@@Q{z^*FhCIfcyP}S;^F8Oy)YhfbIx3m79*By>vLb_cC;QbnoZTL6>J{ zqnj(uu4f~#HzWD|d}CByN5w&;JZRNZdB3tkouG}>*BLiV4(oojd&q8S1= z0W^6fla_6ZPNOn+mFvih!fx#R9O!6HqlfLR)K`mYae8TEfO)_w>|}EX*+J{Pu~eUd zI&uxD*=^*MXwm?*^eJBkYdsye32M-FrXQ1)xdm!gi}r(C9S0+y3sSWZ1nC5o3_f2D z9QQOG#JV`iWM^lhznRHp;1BU#q01$U8_7tiGBiP5WwcisYh*W@TaWE0PC<0Ae;aM} zmRdvT1B2zo(joE|igr6;8`Rdm+&A!64cw$M6UwZno8UZ?K@6u+{XxyzP=A44O$Q%; zMtSM#^ep-v`1njFgl&VfZ-V$goX;bC5Y~wONEOt3Kja(A8Fig@R8Kadt)=z~=YuuV ztY*aMnYA2hex(ZfmvM-2KZQ7S?$5cZ+)1`3`y9JF3dHO;t^7vqrp8h2z{QJE31D_L zKjfL1OCvpD&O6K?{Ebm*(p9GrDUkl{#>%5?Z# z39si;7eT12(2Kz{sxq6w$49d=w}6Y|pYU^p8d&#V$q{Kf)aZ6aqp+ZT14f5C|Hk{qaRAAnL(v+oB(FdrJR9!Inh(Cl} z1})7?)dn%#MSY7!T=yOJpeMQ9>)kuP9_gQ&_NH%{80@_4>?7YliJKvaQ>@&6_$MDnK+QzeuO0*Q*+R z&9rtpXCm~tpZWzH{UYkev~o}?j`+SFguW1X4a<#$F0&jg>=8YIE`p_xGXhsi^tBr`a8N`p`F`RpQxe_>O5WKD? z94H}nIcJGg-BgUH+EeufR9GEqU^6mYJO)-+h2OzNb90cz4={C@6wDgBF0Ig)u-n@F z(Pg|ie+QhtFx8kEPaTFfPzv$jF`WR_k_TV?%8o>~Il&JS@{6g-HL_glC)ZR;sIllV z8l%GI>>kc3s}sB)hOTOy>L@XC1F0V(-7{p?j>s=XxNU4nFsd$$hdBW%nH`a48#Rn- zhI^d{npAG=xrW&LtEl_f@lENqbSN_5ZYCo;gY}^5OF*@`NT`k8_7mA5O^`b(b<}cN zO??R5M;Yx^*zb$YrbZFHfL2f~uGB^Syb|6P4NB-NWSF+lB3rPb>=Y3CSM&_*DV@HH zV~xNruZz822iIW`IQ4mo#+n>PUjno2%iKn+-^~``&O(dy2xq`)OQXhoDD9G`D}&JA zjL^421#W16bjsRK%{fLly_wcZ?Ws(V_e=LsyO$Qn2-i_B&){TkCYu$yR6D4!r|5xn zNm{0FLm`-lm@|?Zi)gzE@jeY52i0f`oro!LIzC* zWvVZ7noEDDZd0eIBT&JvLKjfLth+!beFbG;6!U~B#cpM@a+|r*;8)|J!2c3=fzwt% zg+Zy`)wfzoBbV95O19^^*X_Yr^{nwl`>2MhmQqx1Ax$UOMMrEb?BXNgJMeG|+5GH1 zCua+EdR1;#)D6G zLM3~e83u*h!@Qx-;2tkTO|gJp4_^Nixuqmn@h*l%t-YI#L}h97^Pvnp5XPdfdyn-# zST3&kkzZ5mKlEs`wlx=StBl?{?jw7sRoKjIpkdU~sl}8I@-pcu$qs$wqL5vf0~!Y< zn>zuAjUR-1G3wYN$ap;S9U0|2YC1pmLvuu!GmHjyx`DO1VPJRzcmb}9GKjG&Nqwk* z_v9tY5VeceQ}1BRGatciblyGez2$avID5Z2*BGkz*XF7lm0PliOg9-Wy5iyjK@o<- zbutdeKaUzG51W!bh59iGI!Se`!|H$d_;ltV^NGm-K7NF?xIWxVt_`kwlHiKl#pcA8 zj!Hw|I#5B*UTB~7_l9Y80H>|(spaeJ`R+`x^IEFO7~iy1S|;?aJ>{bk1MkOH(IXBL zKJlISU))3}(huPEsn2F$e?faW%&ceDA(!rBuHwi+wkmS!Wi}H?@&gWaFkfGI{imC` zLWbj>zeY_r3}@aHgu0ix-U@N5xIa9SKbLp8o6UJ>tv1IP{q!NY_eYg4a(*~|&Y**w zF8&g_p|0)?jbJrbiDS6aVB{^?(s2E__#FnNGyywuB6|RxOi8#6zH&|YOK^JK{Nwal z0_8VE-he*7kg97Rp#lCdEUN+>hF{$^-ktuJ-ddiUP7k}he&}z1@web}xdg98 zGT3}LxK?*Llk!B_u8!CG=$(uSIP$IXStBz>)R26QYQ z72ahy`=*h!q%RnCUx5f~`O3Hhd*St}hPz zBHkCf5F#x=E%`%Ut8{|HDneHc-OOh-wwF7pJvF?)e6@qM{MWoyJ(rzDb{i`Jb$toF zi8e|-u82wld5;t>O@Kl)L}bL-AhTEbA)wI$e+_YLHvB{bxIx@ls86R6S@OV-b%YNW z1_*D3R@mczkx)1)*UAal zZ_PW#OFgX~&=S?9$~(ETyip2D^N9yNT@J+FPJ&OkfqmQ_y?hLB^Ez*$vn~OuFa_Qc zMQA4MK^-$#3?W0o&xS}A?s!|pR!^gQ9e}Lb&>W0?e#CJ+BfXz}(*ha7a|9>&e|kH5 za=P#Ajp!!l!;7#NYrh2g$q#V(?S@9PhZH67s)11N7y7})DMBl`3>V!dek&B1$2=?K z!#i6qFra7K;p&`*T{aned^Ktr3ZByTT2VcVA)BIA%I@eacHenA_|E!g1V4t0Va)>< zeU-c)-GxpsyOLGetYNf-llPUH5q^Ysa&0)Tsz^6U7pMelpp%%O)9Zy%LVIwW+F(_Q zaF{MaG*`q*aJzmMD}dN$k(Np6K`l!u_m!z?C5?bs-ZV~`H$iG++`l|0y?Ole0v*Em zNG`m3@R&c|_s}!iE$jGfuN6eK(H#2NRW(ipbyWt)spQd;PudNgM1u2e6li!JP&-bf z@Y?|$uL^Fy4M#2vR`nSg|3%QEQ*w3XwK7sIsHN3U>Z`yErdaFjn~vcr;$7*>5Lg!c zD?DA49?>N1Kp@tC!8^p0-Th*JvObvKjZ8*0c&|RG6%qS#p`*_QS410$M`zuGBoGmP zq?7QCt`|2VcV87#k<4J{3&<-{N}3N^+e7{+x5qV~p(a3iJfu%EI>Al&7kt!5+|QnP z-y(llaADZwh;7jwBG-o7VY36Wf4#S|$L}(5ai_7o=x>JWH?(*}9}8|6TbU~tlwU{_ z;d%5(56LdFkW9qd8bM}5?Yj&K}FYa{@`Mz9EIjfXZZ>ULHjQ&jDV+=C~Si|kn z&IjjIqZUb+@mS-X%^%5CA9>D>zlb+6#{u+0$zqk2Rf11DbT&+mKVS>O%?A@6TZ zFb^9cAf_8NTbqO{KUwi8E8$^(551)-JnUD<23+^4t8 zk0PfL*Lz6MrE2niaFWAHB@p@~^bR-lrQij1t-5vxXS%!HliJq^x=h`$OcCC&L4lvX zzTTkc4pgBD)^u~NaaWIqm-`fU+;oLSolD6hC0E)7U5q0~5X&lvkzz{l>PNzT;k_WB z+pjK;gBE5&7dl09^}X10qpdm6!|uE3y-6VS9fA?zN^q$E ztG5&A{CoS5waGkcJku?`gSJ6c)g-L2YS?QV?cQm|w{69h$&LSP~B2{L&Grj{HO(1cl<1+E=R!LNA!C<=R=G4_)w> zz72mE^&GG5S@$QyXNL;a0+SjiF*nc_N@PZP3Y`0W$!D>@NZ=zcCw%2M@LkbgdiWIl zQ>d_yxz`-eXX0z|3Nuwgj)g1M-l1ix|FNN!@U<-eYi7Vgd_PMd=KHPFjNeXouo0;|MiIa zG3paI%O>eFj9KPhDcU@g8y#|Q^vMO83`|BQ3tYbC;isE|?(r9sfID&%gnl{a!3;+P zC~0*u6w@1xKxyyEGnJ;uxY-f;bDPbqsdlt`$MrgUtlnl(=o0ZzgZdzszmU>Pt>N|& z#LmJMzC3EkW?U%x*vc%$?nNhA9c(@|^OU{_LUfgW2nV}`?y@7C)~`V5e-rWw+%7H` ze*jheD`C1=k$fZDq`q=KIO`s$=d^A5cH^rVhJ9DooofH~abJWkaS3OxD;3a3?8ekW zS#gFy3tjnStY(H=z?MZ1zaDBt4(1nn$Tjp7ItgyKexS4S=mYc%+J|>Foq5Q_u;bYe zY$6=wjiJvB!_`j~r;|#OAFh`TaJRL9d%v+U3ffRk=MMCs)6jgIBCdDGWYS*wBi36( zGFN6gqt;HYb%5c}wkt-nNZQ-xG30GN5umcCK;#cr)CsW@jiOvdgJ%&C)^H2{KgO)X7 z&#)!X*_7oUpo1@f>V6IBBE`X7_fXjlFT#4LvQNQjIj4gaX+GDFYv zOawa$`@bJZ%hIhOxK8Ax3@BTx`t3oe%O2=X+ zzGiA+dZ8G1j%x(>&nBT6oIjtj@&?NFK}r=ZOfO(GH*a8K>7F?S^?N16*S63AH=<&c zNC{l`TYMgV8Rz5X!N+}u=>%eN3TrHm{()mprn-QYm7z+2+SLJ}9tT4Hii)ONK_}wC zvkx%Q=yVlsE|&>C&R`)kNa;>8NGb&<2!SejTl=B=&EZxxdpl+ji|ARkoN6hhsXSEL zifTD1wn1#Q_yODxurHHc3r_G2OsXDj(l_Cr?+QAf7nCvzj5aR_c?a;zlN1G-_WSG$ z!AYDJq~#4rX=;8YUmHEn8S!tpIwO(s?kC_9ab!^Fe{x+u>407zkdIGLj;4TM+)ugyhO2d&(Kv(F8lcb1NZ zyYeMd8#7eZF*h@u&nqMgYsKCq9ufbpybUhuaoQS8Yvr<3ySG``(DiRBui8ppxEhC( z{n%}Vh0**AD7zOC-`?V!BXZKk;E-zF1s{P?L+iC=?w01A({j&ZNI-rWlg*uo5 z+<~dE!onE-8RF|X5Ruo2Z|T6v20#USO>Lz5;#y|`pZ`tBQ=plOpo)T*&V!FS2#szp zoXlOB8%z;)Cs^qPt`oZIGs0vX-7meA4#@MM33k-RLyPxYg54Eeo2-tT0^<2~M709+XE4$sAmq7l#Ra(MY07{)PzI}TIrWH22V!}U z_JEz;0k1raRezc5!$*Q-OcLvp0IJ<%i1yu~%na3+8IBchPcus()}+LJ&!`lJ&tVaI zWlpRCA9W}g@l$a2H0(UY@uy&d6+kD?P=8}iq7=^lKZHCTRFXQ_cRMgQ5r_MJ0mO1B zB7SY~lp5R%ZZsSb4}?Wlgp= zua9MtnQFM}Md8J$%cm69K^-v2T`0kca*QHlMlMvhjRNQ`eNG!I+I)nX>a2Q0`7Q@R zDbW#u4YY>xo(UPw=2n8pJw*I0%6x&^+!Ol8Z$f^LIs-m_jJkq-&O-}sLC?m_S|sxP zQ6>{R7E=rTQESiQOQ74CA=bu(;5AU{mP!rysPpP|kYj&Xt(|>VXE=!+-K#~Zd6YzX zo^%;*rbG~G8WTJButNF{&|o`bdg~gz^NGwF zXmKs!3MtAR#)RZkegbmbJ#iLTtqJ$dDv*?(S}%Q}aowzJUvzRI(oZ(pqj&16j)Rvp z8I?_QvK@U|UChVjO&BI5T&7jc5^1wx*hJ&(D}VW@O!;dfn-@?MzY+6m8v%Qk@W z{FSYZJ6;H`qoQzqG#7151lN*8%q$F0YNDpisi!lFW4CRxi@UD3g8RxI4@OhS$Ojd? znmR(+A^(!fN()H{X@yzbig3?XM$8`yJ^BV5(@mgIrDPv4r!k4Ok=YJ1e;wD`g=*J} z-H)8!h}(yHb{U@@JFS#>LmWWD;PUK+iuQwY37(Ush_Tn91eSB|y1U?Gp6JBdPt0@1 zK~(g25byIUz2P*9kov$qT3D7O)U?Ok`Ft*HO~Br)78_>x5`t*y$fBc znOOlfeGP4xx&eA@aqPTrq$Qkf<-|)u4dFg|$aEm&1K^`qp%UzY%W4v8=Lzf_s9$F= zkCho!|9UP3U!C8DV=so+Zl#!)oF#vOqHUGiC^?`^T+;R;uU~@tTn>&8(_7i!*-Lpw zW8ZPsd(fJXnqMoU4pJ`2ndCvzThPgiprg;=+v0^4d{t-!XSgX`3-qk%!N>v0FtwQn ze(r(X7IgBt(LvtlOM(^0;@Gj|C|q7&5MzoepOwApNUf#b5)RA3)(*H`ig})Ty@6=o z7EcKf;{9+y3^hh#D)*tPtM!!4=;r#Ne{W1)!Lyq}oDOH-L)561k$qkuhHgaFHU<6k zeE7$2Kx>YNezJ#GF|&OE`rl6M@$IAxRJa~;xN=Gvs#ef^I%T9bBdyGsgWc_>^{(^1 z3t0ZXUY}>9Gu*BSXJLM$E;o~0wR`c6iI0PQQihM3U z3!fdlzB*{ee9YkKLVeV)5?J;VMAj3?X;-D@vZQRq?7LTcuN~4i8Cx+g@zsuV$9Qge zyZdhi(*~ORet9Oil|hKpSf32T$b!kCRXBcW_+Mh=MN(#I4cP2$c$c$?w}e?j3wV$S ze3kd$s=Nkw<#*l(|9C&le5Vqt;aLzOp3m?O&dy|DvqR66YTzeD<#TwR#$7lSqsb|- z=)9Puxge~DpTED*Tj(JS6Xs)5;EfOox9M`Ysmqh4#FEBJq4F?L!+BsfU)7~rJH3Jt z3m11`yN&a=d(l(GH_u-tcq9B}uv*}xFA==%yffRLX3d3*`;0E(DFBO9399r5xfgid zR4FT{SrRnD_ox&`f=rbVWAOxttYGC;#lOUv;#rZ#^Ec)}cdQ0l6C=-+vti=BBI5c+ zILNaaj!9V@d>-Z8E|?nd`9}vTgr$u95LPdE*5AFmGEQY}1YNwD9itWe@xvY#2T=s#C;9xTx3o%lTOE9(N9&JTcAM zU_LZ#qrQGX%c#v$1L^`LMmZ)ogH(D1@1Y`|1o0lT0cY@Zkv-T|_emNl2G2biBVCa) z$^+y(a)Pp6$pB7V6$;#Hy}1#A^G<7rIK<8BY44ru`|9r!d>HmJqD8jPncrm;GWgRq ziP{kHGpu{i37qnc^!D^LaO*ik>{HoS~;#< zfK%O7OM;*u1Qi>ieZefy2Yn!}^nP=sRnm@jye{W)yj6Xj{RaYkSikW15#6G4rF)Tn zd8XM}@@6WKp?bQ`IJOqvHu&AY!q?Ip>q+m1IhpO6)>!krk>41sKhQNiSR&Jr$DlAlDDxZ%1r}Db&ORI z&;Hnf8H!rkW)S0k3Ik_AB$)AFsgPvBYkL(_<>ztNzk*6NkQPfX;GEtnXHixvu^_We zG*dsU_dz!GTgldQ`uIritamPuV_4S&OE4c)i5Vq6xu*jsB#BD=&OTa21OluSbFUI&WJN_ zFqbrw2vQ#@4W=71E5|^HvS<&`t@gt4b6WZA+)f2|3g%?;`1b{>hdm9S9JwueTIBKY zkHNUWQC|`79VmiBFtw9tjsVX%tx;MYwL9Wn7$LILS)3;K-MeY4XGUc7fjl zA~hA1eibH--=R-!DQpCr?vH!X6;mrqq@vgfJ5f;-f`9qGe$ZH9F2R#^ZaJ2xj`xP| zufVI|+VGx{rNU)qmpyIZ0!RymAldk=%X*YnOzp31mp@3QrFnSbNqan3XMo@p zPD6<=4`(yaf5If(OH8EMpqZUe&!oW2&~a2WJE4ZYgukX3`lh|g2(>9{Ibx(T@0iam z(4TPl89oMn-fGTM~GKI4^k?J1y-}P{9ith4gyxQ_oV)!SPlY?wgll4S1R> zgXQ$&vw|OPg6`b~M7S0@tyWOMm!qC?_~y`sqo7{cs4R-(_;aLMn6-bb98@Q1U7!pU zG0Q`HpX{7<^Lh99%EG%pD11opq(A7J@5$pnwAWap&{>SpM{CP4q4^a0Km}yM>?${)MTTTmAx=(Tc)!`Siq-*ivxn3} z@Z7wUObJm$JcUYT1{^mNFpGZ>F5xH~cLO??&gk0ez&qR)oyB5I!V=7?FGT0s49_}h z0zNzr)6b#Ex)b4^FQ#NwqoIU{8U`wi;?RSCx_^1Y{p|yteNR2r-Ou)VtBYCFh}TPK zg)uwOK<)(h{%QCvDhk`-^_q=m2kpaIr)77;TU#DpBLV&NJNhe4GeM>>{70)m$>LG# zhhkFkBR80LpiT`F5Pgi?Yxu zZZUb`VHVI+*r0@!;ov@j-nkE=Zye@UEKDthgHD&XW>!_2ssh!e1^X}-p&ht*0=oEu=-r#q!_m=x zrgMYqJ!XobyU2kmyEJBj7YGf+7{Y;+UB+`Jwm=oyqMtIJnd$AZ&_joNk3xBF;=Zs) zSam?oi2fC|>}UBWp63+6Q)WgB=i%}B?Jpe9dhxuGns~O&CeZl8AmpL&Q$Gf`_(_?d zx2@3AKd19xI`|{goV~*~XT`N-wA2+-JGIq@P$YX|`uhZCar?NEx1MjX zhj%C2aTaCX)^}qbb0xCbB0S^fBBl@X!%KY^?!seGCa$1!)|egeFXo_sf{Jg)(^VGW zV=Ji5XDSlpd?_@NYFLp0+>XsH{ajfNS5@+Hd>aU7k>1 zEGENB+HcJLn1t@8)mIxS^*}6>@U)XXLJFY_Jhcwo%r=-^Aw2hC5U%!jJa=Fgyqq23 zAn$_bt;_bVbZ{#Bti2OLaCdhI?(P!Y-QC^Y-Q8{D?ra=3PH=a) zZ*qR$cX{@6&i&_fx_Z@GYmPa_J3SSRr`iOy2EAuVPAMf9lev;Pbw@sXbM(qjRL!Tz zOq?`Vhi@|$59Mn#(caKL5Ou4&8V&(3wy}F z52AvP6I)1KxbY28_S2VWZv6DL@h$U&j2)clSrq}T_@4OG^&hFQBo4z~0$<;4D%4Hv zZ5v36Tt}Jmn65yRX@)u)86o0jc0xJH9Z?7M@I-_K0?l618^fX7^rthjz*-vS!f|1a zy_=&sZ(Vtkv1M`cwon$S@mf~nrl+89l1DTa;V??8INgt>i+Ea(J1=mmneBOn{&a;h z(+%@mmXcdI&$}h^+{f|F6BKe23Uw;}hIFW=1JO@^MO22!;XqmYXzt3{GtQcWJs)3^ zy%{vK;^c)g;$kib&1!~vL(5>C_T=^r^Q6X0T@eR=3ing#rg)P()EQKZl=fVxmFL*w z{=ZK@i;q+^ouNBWDQw*pkjJ1=_d~b;5m6Bef(;$#y}1KQ#yINvr>y!B=+jkj zgQOEPNg3tB?(#4U53t`INc`?rW206>&7!1ozmjf=cc>aKJ3iwmEx=B54fou7G?KNj z4z7?)@R+Xh9(ebsSPR?U*bWF|>@E59 zlI(Z6(J2eND=8z@^NHWRu5Yy`$~a0!E4w1Pf1z2u<);3cv}YQ71vL7{cnSB>W8P=3 z2BlXzq{ENU(H4TW zaf(jp5d4j8=mN)4XZ2OKvF1CF#Xjsy>FsIQArFkD8(NCHTv@RQ*@;>>_!kKe@bHbZ z{zVJ>V;+Y>c#?N2z3C+@Y$lp~3%u(s*>5J0TDVVQrh#dLDYdx`xwUef^;Nm^&9}u0 z2KUUY`g6K&L@5ah z?QBP_IiTERr~6zVZE_iek1!pAQ+(n)x)gIGR>Smp7NOv!o@#mk)n~pr70&&n*0E^w z*KMPOn)dV#Gu75T_PS#zmG|5qm8{x86tfZDR&Wmjo^^UX%|lx0s(hOB^|0%_^C|9{ z7`k$sxL5Ro64(_F?OeE0&pAaHjRs&C~;yvQ~6j1yVy~*$ZG|-~eU+(|#eLN7~ zpi*RJ**xvtQrs-zqqcm;?~HE-6xgTq>GL$s9zb-p~Jh!tRn2V&Q7k+WI&y z@}MVH6<*Sfsl#f&=iK4y&%LGsq}VJeuS;P zIMa($UzQZ^3;pcT^r2=$I4LY9$LVvOYUaH1kZ)cTf2HnQ?XMDi9R3-M4XpA>-h-%R zWwi9FpUz|?yG}E@@fY#2*CY*`+TL6Ef`><OdBAC!-P*yr zjf_ZFw97hBFZ$RG^n{Vl!nmw%iYug%RB}y~j_M5UsGfvM>Y1-48StZ#$3j}LzyF?h zfG0CP_G5S&x8n4Qmm;K0Vn=@c501**Zbj&keqjx1!PK~KrdT`S@G8RJQJ7m_2M9*{ ztiSly^B}c$7rqNa=t%6P`xoQ71*x#BR78%U17{}%To|XvE|1^0&Yze3`vRB;KZErH zM_}`&^la2e^4_;nx>=g(4DI}IFXNco=^>OdGKcPu>4U%UFYE0jdSL{v{b{fVCI&*Gm*F{Sc0_&; zl?^WNm-b!3(^-NPK~~QCiX?L@)4fcSULI+a9MTJ5_ z5uqx+#%aP?+zmCM2n8SyIPen}=9v!?^GWgS?6aWK)**LaNAG8B^k}}O{wIO{p>X7b zsGn*7rU^&Y3@->~3~cn(_8KIzZ^Ik;Pf4MqaW{rP@JuWQYa+tcj}bfbc|9kCpO4qIM1_@de5SlFq(MwcnyEE zz}MjHa470Sn!ho6+JX?N&xOhb_xQ`R_HP;M^_jRk&y&PY$KJCZS3)!KqN|MS3bc_Q zj+KtqFp87H-MNB`^deo(pLUpcj=7F!)XUqPVb>y(3P;HMCztohy~qUx)udW7oIUA0 zb-ZhQu0VG*o4JuW(}-!yrjLzj6}=$pUAR-|cA&c7jBd5o7^Tl8Id(+(=`P?NB;S^D zLBrPQRpjI^7{ITP6t#SxV*|eJ6?EJFrSFv4*%8iw>>5TQsI&N2oF=7%DKmvTTsqaH z#cS{NpGKrN4#mU>_77Piw?;LJ&Ka{NLx*(Z(_TpPJ#tF;cd$#q?Z4yQ0BvS037!?| z4aEi(d%J9x2S{JV-eLqC(>i2{ZsA;><{XG~w=4YXRnAM~LQ1+ux}K1VIUwegPC~hO zC$DrjGlMjxQBRy zPQ-30m%K?X<$i)n+ggp(R6V)zhLlDcUkm@9fE*ecj*lFfrgYjrF}4gTppmznCKdkP zD6((@nLOeDrA+cH>Owes=vbhIKhpQebI{lY4`MsYhC?aq-X({47cKl2MZ{aE@fln% z;F33@dt=6@bRHJ=F8&?he|yR5&**H9v-mZ1@QJR+uIl0*{FU3tLVuv5DyjI?&-k5g zlEgQ8gTBW8t?Yk#WZTG!5V|}1oxYQvNpLXQq=Zn$MEvxgnQ|Xx| z!=E&Oeua;la6ELxi=1s&V1s|hRa?O^8uo^n&dw@0p>0TzltDwS1)+F4{^}&ke-J=c zXovKx#(mEpZzccsKuZ{OHr@gGbJ^S8myBlxnLX_+VDC!~J2!}WeCF2~fn*e#S zo5~rql!y8o!-B(imA`S&9Lf|p<*V;?dmiYUwK?h>C~NoSpgdH%#Pi;dWB;tP8EW-x zxkHjvO!%u8P@VYKFLXrFR~K zy7I<8)n45GQP{-UQj{Fad-mKDFdkyN(j1w|EdGH%2WOyP;bXKwTAeDL3rtv&BLqO=xuTX-0q7WU8l60+F zh&K4}L%C^|Q_8EAwW0J0Bj{Mw_D}Y@JSS0e+NjNx>fAS0vEygJN&lNS{56#KuQ-+A zS+Lui@VvIiosxw9@JB1^QP%5=;uG!6gVRYq;I7ab#e>DC#mw3R~|orhrVGnYcSGz#90+` z<{Yttq{zSJckYKI;MiBobH|bj?%qJ_UK~$xPzbUJiy*+P;v`(g^S=NG z!YdvZr%O$#Eej~6)Na}y-SFh})-fXVJ?aE*_ygscD5ptrW2`_&>*IJvzx6h&`YlgX zv;BiInHH|$R?>2f;M!%ti6~hV^oBer$eqv*PvSr+N3Z-N?wbT(z;YpmPH}O1O6}PJ zHj}MUr2EooydX!F_i9idV+`^f(%X^PNr9qZmIG2%ZrJyoX`BnlYqWtx--uggPjbpj z(WR4e&+Ui%!3UT8Im^(r@Tn+)@FZ9X*+&w+ko@5QGLe{G-+!i{KGMR&p z_ue@TXM!Dv^FO#E-Y5}TFLEu5wPw(g1-C5cWxe&~WR)Q)USuzuA;_pnHn;$JsO(2V zMfgcAF%6G%NgRkOPPi2OvzmiY%B%4AtU*H$xM=WGCeyN;y7`=H=%p@a0)F~gag zy=NtU!zwUHx{_P`s$IZkdz*ajO1%8XP&1++>Fvi`-HO$g8;V~HM1+#~Uj|cIzd)Vt z&L{iOtnWhH*h-bT#k3nX_akboOgxKe==c);;yv8>r*H?IZ1X^;uWOIDPv+a-b50>m zmPYz4J(bN$4E}&-`aZQc?|BKi8dcSNy!-)Y2geR>Q9aSD>q8f+2M>NSPTSY~#vS;U zDa<$d+*zcO+v5RjkIFCt&)K2GlyDW){EOxQ9@pE{S^ro|@$_2=sW}5mJKj-mRDw-^ zQ`{uYm$#7U(&?NwfrkH$4oM0rid=R=I@RZB2N57G^bw0~G+E4bq*A}|T-)Jr{>bOd zgt$_Lx;icFlSor0((rXm{n62{ngqOAQ}6_3!5{O((t-5mVE8M0&=r2zSK}^ENtSM$ z*jTDA*QHy2RNbUm)l;}n*7L4C;WVqv^n+V4hKBLY%R?B7wO)mTZ%0e&Y0gPCyA!u- zeVlFz`f-AC{XF6$gk(Sd+jh_ruH&z-h1>DFxjq@`>|`7AQDt_f%G^iq#sp7t1l

Hb_e$L6SK#;4P>t8Y$Zk)1qZVDMR*7!M1}MjuAhgziHS>;7UWuAD z2r~9yJdg8n-rhh}$qj#ItLXzQhN%!eYq0wiqP}m4mNr)?PDXnP=e`HO!b))}n$leN z3*|RwOMcvjx|Bw&g6C)*eX#;)*3V#IY$T7p5vS*KG8+XU?X1Dmm>CYnaXzmftl&DR z)^#G9qv?(38QhAn;)I+6gTvsRJcF(>$Ktk5w`OGJwTHWO(%uWF>s#km9B6US(c6)k zy^hz>MxWv}l~iuJu+#8ck--xFq3bz{q|QWk(qpVQ1MPM!-faQ;$toz>^-vCTMPxxq zEC30mEn38G|A1o=~ZMmeZpfpj_+F>;P&TxMY3*8`LTx8ufCr$TT{4D*DD=U-KkK=dk!k(9xu1R)wyq0v#*9-OS$+-LXcNW2s^-R1cy_fSS3)N)G1)lr~ z^zx)U`3`jcKL~|++yBs;OQ3&zrTdsk?yU;<~2*v(*hmr1c@MCq7|Pa_>vhSahdkMn0bR9WCpn51-KDY6s^ zUHGE*al%u)d>hH;ZRS+Ji)xyU-DV@ZO?nbEXGyLMMz^nxa$f^)c^5h;8&HuW=#~!V z6pEmOyA>wIaLX^tAP5DUxMhC8ZCe`F)h2R8m8kG?;E@;v0c8T+xzez`s*9bOsPr#% z($)}nWT-PYSoL>!=Tcc#(HXTT?zGkT?cd|*UPq^Hc*FoQ9OGdx?PA|gmFVwY$w`|P zjrk^B;*InTHdss8ZlfWG=@NHxgq-)C%cyQ@NsaK~ZBx2yXPEdhfaKI9D)tM`)TnlI zIAzKUtKbfdg?KQ-lFf37-!UI|id}rSN)W-nL-snsXKs$z%I=m+`BcVlaa=%oLYpQyWuIxr`Hdhl@{R9-F zXvpkOZDmo+i$S?+MK68}_qepY^_$3xRYj$jpk2LYZ+%X7$;97Nj9+Cc?^-H$rfKG< z=Aw8eeAd}k4|LsXLOk4??1_}_{E7FA1JX(Pr#pxGS8J-KS5ms)N~y@Pl!Q%woD^_F z`!T#9V_Elu*z1>a(!Ao-PMCc1oF4pSdO~G6(PE&hrRA(IN{6a1tL-fOl|nG~&T+dL zjC$S_f^i#?lXKAS&)NIotG@!dxIT(UBwWR^?6Yn4<2bx(QaM&3&oB}`bTVfJ#}X9N z7I0T8bHAu)eZoyO2E}|PH-`ZG&N)uIv2@4d=$$m-R?&}>cPkota&vB!`<)~y8l$eJ zw=TD)kz;8XL{1*=uPf2|1wu0H79bb z{bucJGf`c~*pJbpjKG`L5UT4JxbP>TCMQeCY8$JyM(jAr-9OPt0_dg7@%5Huzm@F$ z;huCwCmmxA;R5MOr|=oeqDR(V?!a8Fb$t5*XoX2(?pz|7 zdm2aaLo&c_>lx~p?D#QG@dUczKq<>TFB|_AIb~ zoj6zLqcEPNiuH^CiJNhFPk>>2OZ}rYHMV;n855wsL_j$EBERIfFG(GF2hPC~Xj4;B zX(kI9*!3H6*V)3U7q-5^(>{mVxv8ZxzN7N=PFu65u43v#Qao7Wtv9ThZ8ONuv}Ub0 zV#ZZZZqifH(Vn}eLutq>r*(&w9PoSR>5`|XZ?UHYv+TCQyqScndkSiiRjh!sQFV@h zx-t=6Y8Awhe{BP88Eg+wELzhuNk!N23c0ksFicNSw|t>;EX%L6&zgj{bS2Nc8+olV zsJpQ+eA}|#R#HPHWMog_0NknEQ_Xs1y2=1a)Erky} zo?g{lT+FBVCT3PZ8&1AA*8Py@JK}mPWi86D5z7s%9~_tq=mur@wQq8NpT;e+9%^1$ zl*9&jaQeHlh>yiNq~+q=?cs4upi>t14DewSGbzA(f+Ym*I40*Ba{cjd)KZUy@)UIyD_Uf^id9^IT;qiHfI^4l(zv zD+k`QEKq+cp<;~T2|VOGRp#`Ihej}ky1pZ;p^2>>9{W|$0KSrrYl~v_Lnw=4p~6In z=X>9G4sc1((VOBv{vzLI0>d5ko0h|9@7drjIZmM+hnL>DcIB7iPNP6yX4_`U?D=|M8A3 zainzih8jB1rHfm{>XLzqz6)yW253W6kR{52Qr(yt zI5*%S^u*KN7602LQYE_~g1g~v4M#`vaOb{&+jP0G5C;7^ZcVp^-$FY27E{n}(>OYE zbI#(N34>)Ex2QvKGn2_D=*D*=NzqfANgn>8r-E;mKWngEWSh{1Kr>hn`#fWfYIKS! zkSJ;GUJggKGClIFqzdXl92v-8a1jc1A@t#Y$=Z*?Nnal}L~VOB=;%{mz})2|iFHiD zah%0Dm}FulcqsK*Yh$>_{3|bWk5~Fov-Z%Z8e2Rcyw&_S1N}nZ=ok2-I);s=`p*Y^_$(_#HH_{WT_S2@I2c+T zsKNK&>ltHopjRsO_BN1C!3fbIE_cQ9D=cxgLb-kKxWVqZ9@fN4_&z5b zFC1QHEeJ!m;QS0FeP4-gO-^Yqj-LnAsuh{u_(6To#ElPz*IUKc-+v=eB6K7?FRDTcdITnWTE$G*mRKcd%qWk)9FwZPh z2+65o%u8&KOJOkcIQHT44#6j1ZToJkjzX5+zL?JVT1QdmWoJj1O3tFcR7keCzqx-g zV<@fOg5J2>x0cDVn|(P*4Yts;Yi9Kaj`HlBato*_3zD3APao(oT=WA}7x(ExN7=5E z)@lrq+<{L1!tw}4=r@al|9>5BALn6zv}7JeG5jN`5b zvjKW&>-A4YDerUNMgLdt5T<_|)E22-$%_ue?fFpjiS1lFohJ0!(>cbFLZ#XW=1PM3pMQk>e&S-HwyRa zfjD6_^x{*f^Gi{57C|F90v$Yp9zkd7#soh3M*PK7@LA5o-+z&tRoHpXIhww$O}Z_e zWun>%<+&QrTN&Ryx4b&ut1_Ahq5BIvx}CIIzr>2B9Jjj9ywNAfXkQ?KnUrd}5d_;O zu*k>af~$t_HGkst&Sq3ktEgHXcyZ@3;i)7Z{}BF&44i(oxm9lAoL61{xfY4-Nik?1pv%qN;5X78 ze6}BzNUg5^6eo~utkmMT(?z;Ha&{<=BVD_3pJZmH;2EZ>OhmsKLoKlp@=8jy;y$>@ z9aK_>QP5^kPtK%z+zWdoIe$?cmCjr0_L;l~t#P-<*}ma{%1fVij-xj0mpjapn@Cr% zk9#nR&0TFI?3Gn|5$%t1-hB-1=mxWLGq@T+ioStD-x7~+HrpEdT}Q|bm@Rv#VKSS) zQ76xaUt1qtv=o!pYEnmzW8&2dl&VJf>p$T5Tf_Pr&24XtVMzE=p-W@|;CxOB-p9=n`y|8@%vwia7tq$VxEkXS_7W(`LD%Rfk z$|cm3+fZWJz}PcZ;3vC#}thN{5bmfcr=>?0>^AptG|T}OyDU1h2j$PGsjDP z{;Vn15#7wC~zF&$OZC`c4Pg<`@qQrYcz!~0rnmi73XBhcsjGF8rG zx`Qsc1ch!4>REz5ei?6dCO&^9`gp=byVvIG)Eb4Yr>%8)^Y;pE?3tO6vfnw`)s{0a z6K{PpxGbp81omNK+enxk6F^1biT z6&TM%!RC-aTAF-bJhW<^g>G>W4J;XM{&uJ(Z{P!u zO5^bRQTI)y*kQ$q|xFWCh9$bxKjWg{uy+O(Y)vVs8^TL7kSC=TFGQHoo8ZW zdng#$@%Q@pFEjr3W~haSarP%rFwR2;7))(j4##H|DxD#=Y&g-DLwqVgKQ!KTSzHf$ z<&yiG(n?#XyS38_d`r1K%+ldhPq(1)$KbQu#rfThzH4*(QIlEi|B{)=k5;%BHM$O} zbO7>-1%I=OW?CVU(EW&9L08^>JNnicb8aS6C{zGB&Dyow$m4x!>s7* zP%y^hwc4ljW%@)Ds5kvx3!FzuL;KN;)^euBS#OeEdCRQ2X!AL~S5}_;7P=yp=?%zu ztCOOT+fa#1!US1_>(zsjya}Ig6WoaD*c~IuiZ`@bsO*@}M4l|(d7Q4ySZNG5jk8KY z?m6$(?Mfe*J58mQVlUT1KK->_x3^{<_iyqz|H2S^&zg%iU*tW{0pVyX9`-7Hx{}CV zNrFBfhECs>wSO%_N5ficN{JgZfx@xK63wUAhxxNh7)mWI@aYGkpA5u>un@{xc5SKt zg+%aR^3ZkQ@eg$^rUU$i`)Yf924-6q>qAt6A9RH>!JQdnD!}~Cy{x&~`1rj{Elr6+ zE;7F}7Oi$UN^Out$#!(wIQr6=abIR&zi$ldYo9R8UJc&i%S7_aFliF5&;3ef2q1#C zA7W!0e)oZ>7VDii>3!#>8+eMo&}i!?dVvv^g{Xkfp!rlZrDoO5;G33VwHXk1l*GPF zEj0UWXqQ>pi%yU!=t8op7#dD7>lteolG~SsX>0# zu`uF1>Up^w8~=Cm5*J=#3j-u`GWha(pF1pG(@Sr zPA_yL-I2@8j*3L99AG~oq!Q{wRLjNbR)hpi4^m5)p^q15r@P8i9?JKxNr$95U5TFf z%#Y9!jp4a(q#ss^v(Apw__L)yC(Sln12~6QAywDIeVLNFGGTV;54Vr0t>x*z7lV=< zkKf}dTzEf}tNsvLzvCvHKwqjUNwxO)dKaS4{ifgDk@F>)=`!Dc7H{5QRPu==d5)1J z3ZmA|@~geibWzlQln1<7qgJBOIskoz^Bn>VS%n9J*Xtb+lT7Wdb1aI`ybGTmh!fDgT1m)xvAFB3wq}21+=#~yH@ba@5E0h zxQa2w@Hp(1YQkY#*ft%FZWCOQ&#%0Yf-gMbHJoY#Z6y|*OxU(sZ)Y+OrMUjx5+Ki{XJ=xSa_ye0r z5Cxp=sTxzmM!!fp^ek@TM`S~C(v4ot?WzO{^$)TO7dTH(v(8?lQfK58oXAvm5pDh; z>ut8x$<(8;upeTyom*{7&bNo`@w1t{G7^UFB~^fveboCMr8E<>TQ8uMot18L!^p>s z@G}m>(b0YZZE7Vf=FNDSA97zQLZ;(1osU+eT5^~pA)fg;_luCT7)meZkvWp@y`RM9 z5bIZK2dc`k_>GTqqZggWQLhT&cljl~mS4LCwJg&Vbx(0$ACE+arzu3iT+9zG%6_{T zI&wDNyIbUum%>J$gqLhNQxRU`ZmL0-;1y@cQWWZ5>}kDu+Ow!Eu9;1E%m?$#Jt&t? z+1;<(8VaB2!eycd*p+EZPw7ewpzq$$-I^55Q7yGG+wD^_Nf~I&8m)8nt1JCIT zmgaW%l1X`6=@E=#?T^Okv=#SBO7c7-xYvi+eP2^QTt}0CLQYksmg+)I^d+6oaX6jo zF?XyoRIxZZQ41Y~nSwCg)evgIC+P{apSQ5RnlfW8uXm0Aq_>{uAtcHAbS0zFY3s4y z?=nT~)(Ao8zC`~2q#KEdDQPI&uzk$#tqV2ynpBG4U*nb^O{Sqb^rJZtCtU18tDzpWK@qPE3#mT- z)oGk!Ur}k=Grv=Ic7}~!20BO~@j7~eSH6nBy`@r5EdnQdKq4bNn}24&9(orZ6J0rK zQuuGMH+tn^ZzFgJD!tM4WW>jjP|qMwQ4Twtp3+Vy#7v0!!IxmI)7!zTLtC4Qmphs9EGF%rfV`>@~kcs37>zd z$DNo^p2RFI#`L+JZmB!^#HE2$SWvU>{R;9Y^U-ifo` zAJrkcRdl7OMPY@{uIN{M=U{ZN)wjSV{{x%6r~9TH%M8tm_?jE=2F`|h@)9z6XDUsB z-1-AtV>fUtf97eIp?`4DnGE%Q6Dw^1o|Z=RzlO2WPt%hqqWVZQ{L)i-(s`TuCi3}} zL+jx{c+;eh91{8+Sb#$Q&a>B8ps#~DbXjpJ)!fTS67-jTi^IfJq={l&=ODkwIG>{d zc4WF@G~Gf0T}x+nY8iafTgX5cBwz3!?$O<>x5aoExAUgGqAx-EShZ>2AvA|PmAqYj z=V9Xa3dKhLiToYv7JTII=gZ`MYaG(ol8!&C{Bq~P4RM9u$bK=0xY<<%;#X5#5$kyK zRI((?6X$mp$Ge`F86izsgB$69rFC?L?_@X!;U8^Aj-?6p>PRNHo@Dw&RV6EvTTOa^ zDGY7B$9#H#dAZ?x;XlDX%tDyqE$ML?|Irb74~aex363+oakIsg%y~FtRWJ+x@*#S0Hu)g5!t#q5dUqh%oklHqO*YmgZX+k@mtQhL zbD=U<-JqS;ZOqNxuXRe!AxwrHVW*Fd z7vKfmrZfhb^laSX*Rv2F~{@VI~wuR)rt+$Zpx;_#2el_;jF7it0y66#mkWSZ_`ty>0-yKf2 zN6e*6!|ir3=XwP7#U85ju@D|dbJt#no9mM$imvo>Zj-T`fI$>ugK5eI*z>!v<3mV- z)cb{-{6>ha2bt`Z75}*1cNwPMc%0lX)T7F2GP*A%MXJWW8t=@BV)?_~0M)QEJc!1& zAJirl@qL{p?cW*)P7E5k1YgmI7pVpr%GFHpOhcaVBtDnfBnYPR`CGYRymBmosh5Pa zt}7GW!l+e#wWKykKW|j=27Gm)e=OiuS4=7Cu7Iz0J>7Sos}mK445R!1c!IV0rN_c1 ze}o3zl!RmwoL@)rUTo&yUfew|sacDXncRnmzX5%cDEQnOZ(wTHte8D-K4q;1j=pf3EufleCEVl&@f=RJWd(+QZ<(9DuI8p2@i%F7sN7%sg=2VrQ?p33j#@kr*9uwHU$dROm^R* zRFEMhpV~!RqepwIn5B?ozTSwAtzr`!k zMX0T(@w=qe*BEs@d-XWYPA>b6{Dxj{RX|fWBxkDSUs>h?4 z2F#zxVei4Wy$Ef1lj#Uml?e}0TO96Rs9zT_L9-(jMO)mQ(|G!C?K8>F1QK0Ny_sEI zi_GY7s`o<1E2F&rRb8iyc8?-8u?F?R;VR?o3y0s1!|*IwjU7}m*QphB<~t3iACVd& z#0p&N9bku6MKNfEMmL4OCEgT3BV7%Ppdw10!Tmac51t=B_;k86za0rI$?{@IN+Q3N zf1zBIW7nC1<6(;05Q<+Grrb0{wK@v5ErX*g(+ssl?n(#iPbiU@aB`2Q50b=ulIpcF z3QBtXtv2|ne(LDTRI{s1_wZV^qpGr^l3t}ha*T}hTiX=A{VND4eVp0pOx}gQvjVN~ zqViqs2={6v)3s75PjMRk6(up3t2;aEJ-V%(gmX}`m+{nhS}IYy&1Quqg_dc|bb2djz5kgqP~DwFtDDX~G>mV*gsSE@$@tceOwNZ)m76MdNu1+2 zFp&@bLXXu_t0$Q(wv&9)4cAX+Zf7%Adpr{eMsaIzVU4FZpjx(5Axq5E8;Mpcn_l1| zUk43f8k+4&IK?+`5ogEWw~AF*1PA#$a|0aYWtdISEKw_L$?5yru^KLaH8Mj^S!4Q7 zMe<^+bp;3gBsvp)xxcO8?v~t{jY*0-@pIHnOylpTVta`mlFJ;ALQ#`BZqHF{X5eRT zkF&Kc3hg-ll52SQ^P!NR;0=gFsm#c?PvC=Rv0Y$_WENK5PDfwv9g*TMx)V2;@+GO` zwLYjeb4a7d%C)5CBu3_w!c5^Pf~)khEuC!^d8Fxd{*FONb(sHw0-eS585a9QKDioB z?n3-m8MS;c4&$46xT`X2?G-GD1?J=^UGXU7^e=4{@uKX3yHttH@JF~y>#3>sF?}eO zd*&`EYQ?CYvcZ68;u?ad^{L&5PP+?NXCEro-WG>t4Q|N~IQeR`%5I8}3RN zK6W;A%jR?o_TePX#j3b~LOu*7p*$X_D%QJ@0Ww1dn2*0N6P)OauC?$q2QXP~s}h3i zIG+j0>D)G1<6W=FMC`f$qmwVBVr@cBrlI8uQCMK}bf1?YI!$VsD0*HuG>%haF z71gj0{ek}?qR{hp)1PY#iy{y6oO3dds|lXcgQ&!%94_vBJ6Lx;A>Q?39z%qdO`iza zN{5l{ltN-*S4*6I$02kVXPAmik@h7T&3&z^lb3PPT}S4iYGb(f)WN^L1(#m|a>SQ#x((#hE6eSniM~>c=}U1^XL2jDm*2grtA}$f z$qBo?j<6g*UpIQ~ZBc3GqXRx?H>nDH<5J@M&hk8aFZ#I7y331RJP76X8BG3eOmB8^ z>RqBEy48}Go>*&cTZj4G%i_Gc@7%-`oP;Oe(>)FXeKc%r#mnVC)EMCVv@5g`usI~ zYhB3eRKv;J%<_xWR+ep!PBV}B$wRY*sV2z_G5KBWPvxnBKrIRs4tc6 zGlh4y+P34|malSRCb4Yd^!BpnEFq6n9RIe-^p$?Zr-;815(%POypKER!sbQ0ybk4R zfyIPw=)nV1g(_oAqx2j5(?!xRddjLEk;786Hb8R(8Y3)-aBMAxZyrv zKKV81cHeCC@Rq(!%t&cWJ=-nLl15O~Emy9pRrEZbE^z5DD(l>9 z{|>;IEDaldmOU@$>skomX}QOaBlp*20CtgHezy^1LAlU2CUEGHo&b0)2Zs@M+KMGf0s za(T(Axhs*6n&Yemv-z@kKw2u#<9vIn>iTlyBHWMJdLHgKPvNBAmOhJ_#W;N2e<2UA z$G5d1=u_@@)wor^;5#nh6zvS*rwzaKI1*v!xJ}23K$dH&P11v&ZoVZryzb#;>`Z5nH^2>8jC*30J>h8D5c};p8oj>*X4C+!RMj zYNC$tUp{l_ZDyz*+{kTZY6O@=kX5 z7mjhbUCvX<#6oiv+$Kd-OK3y%<4ibv;7p8k34N!l|O)FO>Gp1k(fb$MU~c{TCpe!c@(vKb`sL9aF-po{@{sEwY?-6w1+t}E18DA5r*u) zbYu+i3jLr)P~D0u6__(LPQPO4-VMGE!KwZvzA-RYerxAoJ#E9?_lhby4l=dQzW2k? z3&P!K__+H>WT#>lO+TE3GWVV<)M`68zfZuQ`E3oeFHR;Elt~zb&!MLM5H6FAj=atT zxC_nV8r0exOzMqy$1~x{tyePUd7gRO`YVQd1fD}E{$(7|M?=wUstj?@g=Fc1Cb`d* z4mW^Eha!{XAL#hW>Cn{^4B-`C$|=leZ3qFYHa_m|w&}Pmzu>RvE*v5C-VZi<9mgq0 zaeTgI;VjJ)3*u$IN7s8Qy@3Pty$w%C?{Qz<@E?db4?I(if}D3AHIg}Bo#kEV zvo)9^n1eGnxAQREg>UH7MeTo3$cMr|$Rr5DZ&v< z(2Q<#s@!u8LA7`cxA%}Ic5dyJ?z`*3)CT< zqCo5ZN@w7gYpj?{dIdSOt-FL0P5QQk-qh&hx#*4dj|$`u^@^$!J|4^#IOgl(&Fp!r zU)63f(=UmVo9gC-6vG5ZL7alWbF;H7)#U=nN3!ET`#N0QUF?m~$E%{PbY_m>Zl1Q6 zq{#-9x|*;yGT^vo_9M^yt+YHqKf!p9LZ|Hl6(HWR9cO+$wAtLOhm5GSrEs^8ckJP5 zXT|M&nNJ?ax9*BgH5$+U3nt7|p&yfh`8tA;!_&aKh>lF_;Pue%$m$vLryHDhJKUK8 z;Wxoifztlu_{a|%m-WlqS2Z`(tIO_e=*5xpR;dEhQM!ql@c(UeO=U`G3s(bvmlpW8 zSGcaRvSUS*HYQCR$Gv(?u8x0vErfwc&92|qAK~D2`tsvp{R9tw3)3raMoa0AraPAQ zSsHuPxNwTltUz}EGw*iKLOQcsv?D0Cg_xLrM=nER6;HZY5_Nto&gQRZ;WM2>aBMe$ z%-x0mZ7FZHf^NUjWfR+q_rw~~Eqb26U|BOt?{^c*r)>l?KL{Q3g=-748kb^8fN^;0M}f@>EX86W+L z!;maSLFpgD|J;E}pArtsSU5*{cq%S&nwU~rf+1?Jqd>UQg-GB8{z~MmBr3{ z&f9!uX;k?abQ;&Al&^(qauo+z23+2I9I5%+jynr5y|XlQi?&QrTSnCqqkL4Zz-~OD z--cjV7rvG?I4$%!ye7&W?Tu<3J{WYvd1~sFJkRxO+G+I;oTpr@`m@X}?ac379zCU^ z^D+CLi#lsCn!Ja!^h@CxbkO&36|&jm_&eU%i!m`b!a0nceJGvR4Y1_mInV3ERQscR z#6O?XFwlqR`cej_1Wn-uk?~O5!~tz`A&Jd8F}@rS`-R>b@w>UNa2UQi zTRYD(E%hK7ji+=1^S~YX$2NyUpfx{4s-x^!=q0Ij2jk9(Izqd$6bsco@ z^02)^p4!;)7&Lq<8ml~KE8{)J1QG@*voWb?>k02vyk*3 zkH;kmZ{R%guLIQ4+9v&$QOLWL$+6pm-{89S7rY)!Lby)Mcv%_vQ?Vp{3~K8<_v`pJO5^ zj>mWo8j>LSBVSawmqJAYi<$qi)#$+qA67LS0Quo1FXP>oad_^; zebNQiN(C~Saoq2=kP%A{S@4GCA2h+0_zkvM&RgE#pRJ0A{T>eDd1w`rSp$phMVXvD zm#(BPo+Y8xjk~N*iB!vLjr460YwP)b`*S7|?HYUj>W8@74aDmBkiBTH|^8+gO8F(MMq8N;4BFGi{ zaBerr=uVB`>4%u1n3C*@7w^Fe=IuUiEVF}jiWjnP}rp*hsM?CH-X84aV9tFLoqVl~yD z#6mUv9yRfIj^PHI;P>f-lRId(P*Hs}ePPy;ghE~mPu(dz%r)`Qt9*WP+axIc7lhta zQ9qbsINH^UchA5>om_bf;iRj6!l>=t=)3Ldj+^-){isg3_lIzw{|8sC*_qqX4UJqA zdXNU}0R3Scoq>C}ORJE6eT{E*JJswQ{;h=$eaH0Il#QpcjY&_{=uo7$uEPIuz}5;* z^GWzFm0@fBa-HHnKU1E`Z@*0atQ9q`dUE>OdEU?yie-+a6V=WwWfyBFYDbsgbk&8O zs^IeytqZB59+5xI4+Y>X9`Zg^u?ZgXSW|WMlu=MF9^q(g46!x^YQqI6p69Ifxpggr zFqoM;{VwNJS4(!@{G>87lU?Yiozcrf$re15^)%W&<)r%rIhiBy4}Q=AEQChBm0Nrh z+c9qH$1DkR_2wq(7Y7qrCs~;)mdcdeloBN+l$ZdYPaavPvf4)lJsb~AZ@eJuQB5qc z{w6s(I7?8+y%z66$v)}+jGwfF{>zB<&NQ;==hWGFYP-qZxyenV|9GA|WE9-gz0~i6 ztbh5x=C*951Ctu&MlZA>0oKWNREvFRCa2-${z0v(MNNGZ#i$RpRWbCcEOdwJF^y+0 zG|fCXt=>D2xHjSF9E5v+p>k1m(i=$StwK&`irR=XEwh|e$|IKNxes=1r+$tU`q(Z* zH2McW(H-*7A@s@tIQvYn54NI@k43c^iDI-O(b*W_^B1FD6h~z+qwc=9Fcl0}Wk(^q z{kQ#`V+~!=X4H{oAi9-NMyW@%a_smK#xAX~nvq}q1Jt(UqT43`wBPz{rV#YiGN~Wj&(V!e)A{}8jBt7!m2mGLrgH2<_P3)Y zsbv!LaWAvh(xcaH!cE)|WjZHnT~2(&HPEc*@(ZLuO<8FAWU2ylAii*mKOt?pUcb=35+eU@{ z4|~}s`VPfWiTCi_E8rqlQHT>fv{6?#nq$-&O09AppS(z^O!rtPF#GaNy7YO z#aHCXA0(?$Cy{R>M5MsQF3}+=fohxJpZ7txI);8V0ycY7co%(1!e6$H7OKGbv_SGZ z#FL-G^v(tDQ_5F$s9x7|Os}S;QqQ?};HOJdihklc zB5s%Fk%)e*#Aqw@LmsoST&twIl#lXj7|EaUFa?dImye>2;<2` z6=!!p2W4dtyG%_o1l38cbR{{n3za&Ag1i$abqnqt1vqK*bJy!YQt&@v0mSAi(K>X%xoP|=!{C7$+`vi<^_6ucJl$= zsO&IC&heb5@Q(L^voZk>`N4=sbcCuflj9+8`*=FhEg{*(kri5Mt0lO}W^cejUJbU4 zTQZ}dgp``}0#g~)yi1HM`e~+AcS5mfLN0K)YX*18*QB&+!r1x4E%G_tk(8DN+$rAD z>uilSoXYf=Uc_!FD?8X@|3#}d=+2HnJ9VRDo*=cbkUP#=_{EQH(>Y^x?w3b!GPk6@ ztR`1_q0~VYVPrU$R%D@4ndKd%U$*`ME+mY=1uMMm>gHyww8PI2HyEw=&%`4 zsF%TQE6S;ACcW~Bj7)Oo7w2R>j$^f_LaklN3Ev)8b|WUBjE1Xo2YtN0BbwXYMbe40 zq*>^N>mkDz(@z?9UsKOhvd@`RSxMslB)t_y7(Z3;lI~!lQU&-%zu^^r#lst~ z_7%VFNZ#uzoazNRZOfC7>PMgQ7G1ztRP0ygDx5G`$R`$K>fH#T7&N6lu$*f1+*9M{ zeTkFVu9ng!K?OHCA5M&JWCq@ui*UAmwX`8M&^hr|TiI^Gb2K0^8}~#!3cYx@ zdpkQ#TD_a$@m}-4@;384(&sY`p(Op-Y)rhVBaXmH`VG(GV4Obr@EGZIqtjc@kw=K4 zN3o0hYde17QgrExa_+a}e!Yx-h?N`Va&mD^tT(yUJh62Xf>ikf966mYnEo+TtSANK zpgRL|{W_r~1U;+0ae?8!pPtT!p}$oxkX%_x?Ro{3D5t9pw2x2Zy4N#VY7E|wxg->C z(xa$gku6VoqqpKCpH1&;J-v|IthAim=66`EydxLbV@|jeX%@5&wE`8qYow|4qqeW^$L6YruNhO+Aqg-^*3hxutk#$8*!z z24yKJH_S2IG4t^h+@$sdoG95y(DkCedSc0Dod~hJE?%qZq_MlBp`CK{!*B7NOkhuD zon>_wREp!XT1^tUf%m2FMev)y5xk8yOt5=}qj4V<>>X}c1?iCN#68)DUq79FHW`Nb z^hnOa%qf7o>k>QJEEx2IA@of~sXh!xC`kWi6BByd+V0TrzbiClt*?f*@rOxIP2dnD zk*~?y-REGlr^fBE*<;01yEk+>klDY=n~MpeOCj?%#7R7a)9zX#?PLimb$xP*S*hK# zu>KlB&OCz0tRcUG&zkW6%;fj7GPk}bIf+laWAo@ZcR^F>O$vSnD)9|cDn)tf`%o|v zrg!#JXK8!&q|kA1`kDu(hBpU2fqv*kON~0*>yxVrv%>R0+F5`~l^x>1Ym~tY_9D2r z>r%llL>czlo}q`Yqw6#kcijqZ&UdXTs56Jrcg%vj%LGYRh9ew_-?bz4^A&NZR9DX8 zmK2+6Fy*Pc@sB4O-bKFP^vKa6ORytO;$fb&#w+cr`mb`y{aE(MvD`K8x-yZ0PvY#( z&f6Up_(Eukf0(c^8NNt4{4jY)jmF|E97Nsl7{*B-ywpYQo47}9VWppDK5%L#Nw#6F zr*c2zOuwLBqx)Hb)t(Yxr6sf}YDHKKwLz!t$lAM%pLIQ)p^em&CP<3Y#K+{|_ptsJ z;BGvG*X|GQ$sV}2{ZIg2Ggsv$%D9Z*u_<#s??R56O6RXOKHG-O*6YUi-X?aWa=tAe zaBsn3vm7pLa!+aR44)R59!wjanr3mNGu$1V>_eu|HM1}@%K z?EK}OH*iTOcO+=kLHk==q#OCX8E{t?GrjW})nXa@c>6sRt9kgx`#Dp?&`u*BgHdk4 z99YK0kvP`+U{WeCJdwVk{$GLSp_Gx2qMt?OjO-P98t8>WyM{NvnqCz5QFG?2ZIgdW zbx}yYczKh!#yF$l4Yh#e`3O~J40?EDo<&{U+yhbWFECZGlw&6DhVst6D3-g)`(MP* z=aFx5lWC(=WwKQnJvovoFHor8 zKsZS!UqP#Cg_Ac%i{U-1<5}kY;7b=66BNR$A_t^dk*-hLsc9ZXRtw)@D!@bEOm8nf zKPR-6s_FoC{$%btOeD#|6Uaz+z6sA@KU!pIXyAr36}#~tv;l`RKThKX_|`MI2J*>e z@sQS#ZZg*>>^_6Dr90mBSiOqTz%$l+((|-+PllTy4oWI*a3nQ+=EMS zcXxMp3ogN(;3T-aySuvt0>SlvI`{lzd}EJ2&OP6E$L(}=)vC4TJLfau%Czx632qnq zAuKsO6EyOw^}iG!^QZX#LnpsVM}ZQ&g2p$q=ZtH+b2bj=t?GHE1~rtmau6DWjwdn- zU28bb?win7+Sm%%On9vCKm$L>Kj(3G|KypgVjILSk&!F6ns&eL(9^5J2Ja>-$_ZtF zy$%hVHqGTM;EHjN^X&6V{z<`aLK}n@3tmI7<45;y8VcHL%^f|}3HF^zCTP{GaT(9# zUN|6B6_Rc9agYCjhB(F=gQl2~H^Xzz>o+0nd?ZIu2xt9Lbi?fE=x4YxQ{f+UM#CS# z{csTdGCvN_FKV(QgHv=B#NEEb8{$7391#-YU*auE+uSbabjax4peC+>I-;}~k|ZaHeJ%9){dt*E^`#Ld*>P7rjMMfL-@Bc3oO_RH z58pZ`Q?fcZyW_}_{J_mKh+UXUhU6jdx5KoLTwyKB#N4bof5la^*U|~~C>JY#8YuqX zXgEwS&W8i=f!Sz(=!x~=xpkupCdu_5{F7Y1s-Cy5@uat05J1w|1*I^v`4eK8IG)b8 zA$ahnS-m9aYO(GtWjbdyUxV?`8*QyPylxLo&NSp?dBF;$F$zKd~4!pZ$Uo&I*cRk8e2D} zQeCXc^d>tkyK#-DGjB(q&SUy#ybNb+CH<1);WW%;S9yYNb|-AF>FDPfy{XGiPmz&r2^@BG@Nn9`A-y2K9m z2vhO%I9xxYAclzd#L4s~6k*p9sWx`ZfXtuQy^me~T=-HRH6y)ScDW?Xmt%qh-b@m7 z{Y&^^ZgOXRMXQf8y@kQvFqKYzj+uBIv-t`9JBz)}aeTc3-s?&5I>VVB-^Y!x-&~CR zRyo|=eOLun3k}(2pTT819Sw0AZ$QyG#+Auk5w(7$I@~@4?#g`WkobqEdld@iASRJ@ zaU!*V(mf3N{9&~DEa=u-P}Q2DTj$2r4cH&fU!aX(QCIk~64)ySWy0 z`WC#4;%r6ObIl>U7A^}YsFGUPF-Uvj?BrUg#o$5uML%&G*(*hh6PdH&- zHRvKPQ!fmxfpo*VK` z7bsX~Y(4n)$>JGkhKrShxVx)pd&z1&V0S+s7ses>Hx8j2bn?vBPRuEC!6fjT)^JBZ zWLKNl@RBo3KYg^`MN0c2r`R1hk9MJ3U&Uc=!hh6-eg6~vf9$z$!wKF3*)PyWbQ_YR z6ZTFIRJ6iW~CCh)6EU4EX9ktope#U{34&PZhi1gP;B(;NYq9(KR&>g5Iwh}ocnP4ucT$KBBuZ+`(Ou8e^GX0qv$1g zNItqO^XsePI<9>@JI@HmD!fN0;JD3$mi!22Zw0(JcX)dZH9z4*e+u8#1@2|5;Q(jH zJbd;Z6#9Djj3s(CKSEA@PqUzzzoR;e_B!1wlyJ@?vZwYaW<0jxcx(sS;>oTQ#c%fvr{}s&naXe z&y@&`;S~In)0}2AD@pVmWfZds^=+~6yi`jw=;Q&XrO_D6%660~h>V6ePFEHZ!4*gh z{ZZ@7LMG3Rl35Dfx)*=XDU_Xj%oL8&F4+c$aR|;U?jvsxZ9Gm3_IbyZkS znr#mE-4A=bs@ap-%bvsMX%LdU{;`W{f_nG@!qZG9(DjX1VV```&q(bSTuA4DO?MMdZBITe8_I3w z|Ix`keEW7N*Jq$`R6^x^jOTL}6U)ZD^_r2VnvKW!DQTMOa7-`R775L8z?H+9vy7Qd zGV`%SX%nCRlO%p8&Tr3g8BFKX8>G_7Kcs&8OH}iQmy(%K2?WW3;?^rYQ7{d6sI-4UXC7@XS>tM^&A~@I+{C7v#fG z#U4P*&5zG*r{yF1Q5-$4&5V!m*M8@{Qcj-?$*3g>l7}d#gSpr9^Q&8E6%90+hC|)y z%6)ep=28vRGuv|9b(tUxbJrS!OzWUM{W5Q`G-s!O&$f;Ro*Hn*S}1#Q|K+g%Bdzudmz5vo zavD1t7uwwkl8BQ~OD5s%JirsA&<8M)72SZddo_x23x4~8Osf8W_DUSg?5{j=eVJJ3 zU^DDSIiHM{IE|gwY5E3D`0zS$&wofI7Pld#K8o(62WlkPq{GPS5o?%LD9{u|YGr7Dv(SW!9phxPCLxVZEG*MQgeU z8lv+IV2`mK_1a1wRyWeCe}xNlEgnb1Er@b|mfqw+a(_6*Ynjjqw)*6U-oX!COYVOX zS;#ol!Rzpj{_ia_oLO`Tn)L&iE4z8m>}K74z%|#n+xsz}PU0;y9P&#(_Pl0%rz$#6 z3?ApH_=A$IOKgqNIWlmv`X@W=UDO09%@33#Jafl*!v^t&odTmdi)9k?imG@ZqH)y+ zRO8*eIU`W5x8Yu|hm&044Vw((=M!u%iQgjz^*WyPmKQZO5l4SV@&uL8GV3rSoPn$U zq-7+h?0dHPOlXV1eu+{V+4rbFV9Mp7ZRZn>hCV38WAOV3))tlvWd5hp&>qW~VI7Xz zFHrMZu!DQcT{RQkz6Ru@T>O)V|Ex`dV=`~w=S*hn>X)G)m&N65CAsEdcTt!$Lk~QV zr)fO&L)J@Rm7jnoZMWS6$8|rh_86rctfd~%j*i$e(?7BfHfT@y$n{N^(M&%;KFN!( zdnwbh?5V2x23E8|{0)JB2I!`eqC3sb$_15Zw*Hqx6=2B?CMPP5*wf*iRT^2rVOYB?YY zE@kIfimshc%-@f*tK7=F=P((Dx9lpTxaJGkSNM3lTxVCg)tH^cY7usoy)8y-0xrlu zykUmm2`nR*CM!KfeaXZm(a~A;+tVrm|4S6U?k#W!s?o=wL3{dZ8cCXE4!r=E_`g{Y z-qkMN-7U!Og)uq$r~9o-%k<8}Ub7zbl}-9r%xQYy$H_|TNCp&5qj@%&?bC2)(%3e@ z2e*k2dAG;Wfp@{4*3nWs?+n&%sWYH#btKI(lUa=s&(liy)cwh*He_Gh+VqLDYF6WQ zu74Tcx3~F}33R(O&{u)QUKI{bXV!yNIK6+fn;(VC+E3rr2Ph;@OdTPkPo`-q(b@oA zFG1+eN!kOUzz6GSgyRh~#RRQB-rB#)JNb*Gm-2{x;A0zL{yab(ImiC)42to4)~rIT zyUTg{^Rv@>&S&kUgJ&5#_>G*Y9`ZKN&FOA2G`C3p)+A$na-!8a$=0Jmcp~2NZE#fW zxat$xS4@H8dtD9E25}6m?EK+ahi2AWX#-JkEj@C6p$CMuif~_Yac(bQzJQnbCz+J` zq)N_kR_XxfB^$Go^tjv88v+c?5==2;;oW4Q`74fhY9rGzoCsU#7(2%O_TD-y^&B+} zhO3vZ9Roc_O&yCg(RJRP!L^ca?`1}riTz!$)P%k5TU#C2%vtFYjl>sGp6lP8Q_Xo& z3MGvOvJKmq$qZ-L+>Hs!V9pu|tZV5w(+@ΝMMhWhzVOMi@$G9yFX5wlA>!N{YWY zMJ4d8t*{@5@>J7#$~D8Yhcv#9Dd9%@d}XP;o*kZ-?ww1#>z7&m*0p^8QBJZSNnKVq z{UQYyOAk*j&KSR$dq3w&C(~}0m9zU0V*ppm+?94#QoxE z5@S(xixp#qT}?8+kGqLC)}6z30ZwpFHO5{By>g_qNBk=^M5~IlZMH@-t*gO)V?3w2 z$D9kR(CGRUm&IJ}tRAE$y7Q^C_}rVu%=EgA2p z{(=wVAE~L_T3_cCr~qYsqaa_bMlnW9R1IAH{7`r1^7+k#qqZ_6x$2WmAHkIVu(=2R z%GbQDhoTupq8J%XnfS*F8K44w`xQ`rTxcc<&;z?Lk1fYrrJyarR*lad%e>?dsq}U1 zXZETm*^E|qZE(B15&o9mr_2kYoEb@Np2TnXLN?+zoC71dE-tJFw#QIhM4E6KF|#{@ zN>?J4Pkw~F#0or@OK@5qr@b~a%6(Vvv+v|q=3COjK)GqH3^TbBn#BmwkCwYm?t{0y zBLtK=+GA&!d#K0cD<53N_tewRt#_qpyBxE5@;4}F(90{(VHqS2r&n(hwBiIf(0}1P zv_qYI&igVJ0!|F6!jg2j)<82H110<}F25?w3?5mEKuO6!1L6Z)GYCr)Xmq^+Nv^9B zZO;YasV4o!yIh$(y}e(3wL{AK&v{#U(zy>imuTJK&h)m=q`fjd+?}mBsaFVDg#)l4 zKBaP3{#f=}hN9GGqZ=lLo#I3O`N)+HrO9zH35MsKmxiDdMZ)0!iB|Gmn1-+Y0R+EF zIBgAT21wlnoy~C@rg)k_A=wbR250kZZ&^=@Yag!aE=;Q?*yEKHIfpz^`i0h72xE*^!EtqnYCG#^`TnGXn&ONo@bi7m#e$89W#?@sN`01HHYL9 z@*%0BbdkS9B4N;v=~X)BC!0~}C&NIWgdVk>GeVG%1CRL@&gX65UgVLMNs7E&E~ea2 z=0cnar^W1x_8rPlUFhIveOZIogp>-K6aFg8qtK|3E&lwzXP#JhRac}lJM)54cy0H? z&~3tAyR39sti`-|1niqjwo!Qd_3Xd)TH~3HOt!|t?Z`*7;0vo;xWs@nK3eR%Q&+}}3WbaVUI*`PS&en*l zVi$(;ly!vSHU#&>78(ftv;VTcSjIzMznu#5g;&2!ro>#VI+ zL&0ioAIs@VVNUZ{tbiY@vT%z}PH$U{KL3ZE!Z=G!RzQVJ#V>PO+(Oy8*N3Cef3Xy^ z&L*c-2XA!&I$raM+i7=Ak`{Ar3Ad+J-;-KWouyoD+nx@bkIi#oguC(Mon_y$7#hiZ5{V~Fui#Qw zg8_5HoC`Mgdm7qrNv5Y3i^2=4jv&&oCzr}yi+kmS+ zgtb<7q}WpwmC5*U5>#HXAB?94IKe71oo$RhKa-Pn63x{;VO9sT&i+6V{l*@~i?h26 zf5l5v9y48dcx(64A-B?+k2SslN%X~HX`Z`V>}Y1eblc0_=XdpY-|%$xy`!}^&h2pR z*G4<)GnuPPieQ)YRxH6>@TILjpB;(!F^}a0KKh@`1!9=aKOnUnSpU7O#DAHLn|a6OWe-1G_zybyDyf}Z6ZT3&_}mL{nU-}w^fd6!=bLZP z+Biz8VfGwomYv|fJQngWk-p3%XcbeSIh?EFQIVdozlui7xl3RB6n44o`KJ@w%2a%% z_YD^ODzRLHf?NST8K-~dDR}L6(ejf{Sc_f}&aZzE-_;5GeKn(2A3sDn&sxt%k_4IQ z99l-J;39dO^h^wf>b4#qP-XU3PD?CAwW*wF_u=hU+1t*C1X2`bJ`?RTU->5!x>5=L z-{MH++WFtvfkHU}$Jb!i|0Q&nKekS><>BsI&y2bx4&OZX(rO=Az5kpu-9}G2d?6Bw(gD2YT6sP zx$(*d_Eo1@*@_DTY-d={+TcRSf#WlR&n{0+F^)D#6F#VQI0_rHn=ZsYJ_^mcDGuCK z`fKcKE1;6SfY-W~)8kxIR=PrJG9B2=`eQ{Yixb;QRpoNz_8O_nV663W-DDDXhzVp_ z8V&Q~z-hrd^%`^5`e;{w&5g}RaR41MR>gZak(2yaRDn_WZ^HE%(NZ4j?!rAu(q+W` zTLEWrBKmM)CN+;pO>Q&hAzN34OxbLjdsD0l^cLr!8RCU>SH6Jf&dpikhqJD0l~x6% z_ z=;H}6JT-og<;*8a!@d#d63&b-B{%EeWSsTCt%3H;I_&S9vQ5cOW^ybE;VG=IM5!m|Zue{<5K#bE{4N~Mz*;Vrn`+TT`~xBm+q#^>b+Wa9HX5=ivSaui3eyp8kc zqxhR%=+?HW*0a31>M$3POruFq%rJzLitmr(>jj>>|4YTcfjDvuF2hk2$^e}_AMUpR zdnGGVo0Dj?lTuYu9lOqo=5OZB_?z=El|7HQd>rjwvC2C8Q^>6^w0e$z_>LAbZBHOY z@s56%O7Ouiv%>U1xv7lft0^pqIgnAm!q@4s;4xX zw9UsRj*oR&YM&o?GV@PzKZ;rL4{;%Y7kha^BJ9|3*j0jgCU z9N6#h)h{4b(GHEcw=o^3kNUj(FIX1PNsxmR{AYgo*K$U>NLG;M+0P!j824NbsjyfJ zX6r`gGDd#&WzbJrp_n!0DW9s3V5GS$>cfG?rO4jc~rw!3P=Nk9rsz>0e4$#Td;%?7^YT5(s`hJj)J8vsW zX;Z70_~1G5P`ob&+oW_{2zxbR(}-dMQumtj$ChI(@x z`iYfU_*5KWKEC^ToVHU?Pc|vn?d6$-?%}R0O&UGBR8(xt{CN{^R)eLHd4=fooy#=E>mDHf6hx^#i(Wa1nN&r?Q3HG|<52u? zcgzcz$7SQhbCchFK6~6f$}4*ZXh)CLdGrNWm!qY6Vt3dpCvmk$z+O2@f@Ty-Q7_V3 zEC1JC+C=AKKCm(MiHqj@2O4wBFrOMkw&W%=$r{XOpXdrP7x_+};Xah?&&CC&%4A8l zTE^oFQ`lqPfj_cOe#$*R8!mi$$39LEJ;?72geSL~rWv2Lj%5)Vc_C9gt4*9CtKlT? zFNK-dNIb7T=8AITg%8f7WcxW`xpPv8m~fNZD< z3vs`cVt;3b22sY|S$*m##`M2Dy|pi8{vz~(aG@T1s-wJR8m4OGqoF@cW9N2+v|5<{ z0sr?~Lj%|G++Sn@yO%l11)lSayz^Q>M!$wm+?r+SOk>ukD?>%C3Q^SfA`x zDW!>hoO;Sp*ZBgy;F_Z=6M}roexpUuq%koO8H)6DiS8>TaepvvDBo;2h&%7QG&gz7{I258jj;_DEqqey%weFlIB)eJpC;4EUjYcOFaJ?LaeKEtFo*a|Wv<&9P8_qF}@N|Eo zUt<%WH=Z}?IDYAM`r}MP+@x*hqMhbPn@?*RWcmovO@!SLZT)PWWvfD4Y#=Q;Q=Z64 z_Ne*?n&4GeqUV{bwKJ1;3clME&aaE`y?hcPg~1TsBCSg;nOOC{;~*AHTk%+B=IM`R zGMod2`ltRiWb${+nyviz`bRLNy|S#74I;hM z9;ViI%-7yI2fM3yCz6+3NQx+%Y9&u$l=Dd)P%J)@@LxlgXEd3Lfw-#2LMOiji8~K_ z`x9J)A++jL=iMIz@nsO-`4DHQoc#ZvW)d`@qcPKjPO07Q~ntAMbP^pK|O7K^xF04bN8o@4a1X|4;I=kcCFMY)L-I&ibkUeB1r}vDgNGUYEq_<7y{CZCqjJHuQ z->2W|vi&vPozc#va9<#&`d@jQcrKIEEv)@hAKRZPX_(4Zz}5XgC?TwcpE`x>zYLA) zGM;X?`5ejL<~)TKCgk^_Slwp|qQ~{ukYxTzlLo1qlP5Z{4bO3U+YA_fCt*vOAw#TZ z?mNgnmZqEiv`F@HpY(L_tqH#D%i~?^j&fy!TN_W3D1qMO_fj5d1Z2gEqze9{L$e&c zPxNc!KmkgH;LaY-G$5WC%r|^39r2nP;GZ0aV7K1t#8sMINEDiidTARc zh-l#58!` zexttGah|n-KXD8Oc~xl1f4HY_;$S^(egMJCi`%t7x^Y^R^rfidoo$aGJKYgl!Yf?| zjYB~%x@A8?yHSef#ml_bBl?E>^MvfDL(&yI%BS=0a`$oNcN#T4J!gJl@J*1F7I9pUH z5htgrJfJCdlez#7$TK(?l{_208U53PV?uL>dtkpj_jmC9^el2WcNIk?)*QJ|YUe7? zlF8o%{0;Ukmg%ecAz zO3UTCir@YX3c`7`nyXCUs(Ge(ulk~cZ-yj?b5;-1 z2x>937Z%08+E{*%!=Z`YqyARkIbP7;>2=rljN$VO1@8`-8@4^{SV%Yuc?s`Z_XZ{d zm9@HX=BA?78ktQVNhQ7%V=7Qxc*V+5m~M(S-2a7G1Ag=Ny2C$j$m)2QTuoyl;)d6; zk6hvu;U6Tk%+hRnz|Wx2=d&wnT1QeUojlOrdB*GaPYrGxx+HXIu$S)8oSyrx)%3=; zB*Qg{zV5GbY1DZuuDj2u?dgT7th*N=pofvAh_`e@6VHnK(ZqSvL)&2^%T(M226XIr zc#UnL6PFP7GJU)Ro%^4ZD7R6H^ZoxYd-XCI>ES-(2}2<-5z;$kG2NjnJcVH*9MI;_ zTe`-6RQV;Bk;hB##g=5XOGEmp!4uzuK9XasIl17U>_e*_$Wz{kDRl?>J6CaDFf%n? zz|1!qzLcN)K_|=>{NffIynm&QB;jj7XAegqZwHA=%J`av)&V^ z>__cSS!;{Qv!zF<^PA}Qn?_@E9Q@#2c=UrTds*!YLA!crI?CQ<1?$`noa`UbX6u>b z*u55~zxJ=CJN=1`Xm#p`e|s~&rgxl~XQEd$R$If@+U&gViuNpn^t7INScz2bN-a%r zq*F7nyR9zIl#;~aC>drPI8XT2DZFVU_yqOfbRRcOCc_lPjwdsH$$xp9hvUHPhhCqI z(;yaqNes__5lB20NO!bhLa+r7uO7Z-{ICm!3Zfz!v z?wa;C$_#RI8OiOf$AQw9&yKO)u+)RZF%T-m0VbZ2s0zoRfsduTvnvgrLyQZIJB=@K zu-9W!`~!c>Zs=mGEFtiwqIv%N(@bzo9Dzn_R^D@JH$Xos@7(PA;hyMyP6I@OtFZHz zF1#Y7k~{Bm_a{99r;X7FFSjh z@$4)F2q_1luS_RVG?_eh0?ksdaFrE8FWDmXK_Rb(Uel4C&1?MY7d?5r&GE30AswC% zg*+IAyr&e8&#_R(c|1KovzSZ<`a3Pc9-Liy*~uS+P`%%NPW|O5?40Tf@$~WRa#eJ`b*y3n zJDz5{t(>RAI7#nf^4OeS=G>O$=4|HGB$cmmjdL2GOY)4ewujN zvbzc>H+O{M zJrEQ@E&@e#J*r(1wxKJWqkBQSDM!Ovanl+0QNPIuG{v$19MAj&l$l!iUW%}ruZ#yMppaid zA+3Ol{=!g(9bO13Wh9xh#+D2?SzDkHKNglTABg58lNU}9mwSV<`+FlTPhUao@aI=}XJXr$GdN1Q;%Xv8_ff^zu+rQikr@$~4om2tIg z<@{I(U(6F6R{M=bnakIwmt-D(%750~Jo`mN6Xd0<@>!g9nH{Ae3M#H)^eo-C?;$03 zn7-J5G_nt*;VTWN*fltc2SU#qhSOsWpPk;Yi_a)UKKD6JqxGERX7le#JV!U6^yWsR zTnmGt7>J>*D=Tc{SZ8N-^y0qH0 zWK~~FCSSAFwXU$drF~!%{)UC5bN7)<%}9S|SI$mf`Q$jXyQbu#%kghrwA%@sDxbq( zXoeT;lfDAKk)56b36EEC*1tux>7`{tJegkl{E{sHk~MoywVmT5WWVLi;hgqgyh|PU z3!9*oo@EywLo)IkKBHTBsh{#}ISj}6b#viy+XZ{24)j=$&WMVlM~^`5pA4 zPF(+hzwIXTi4$nVpP-jkv3$4eBb{BA)6^UBBIn2p%5z$SW3`OVijE-lI@f)dbe88_ z;{-VY?ZRZK4Rgk0n#}2a1v8QRoY;!v>D`1HS(Y}lFSJIUMk7CkTJ#=;ya2Apg`D9d z(Dp9rbMX9SVm@HwY*Cxt{Z7u%`Ees$6xPwn(3#Hcr8qkCYl)hbMEpD&H-_N!*uxzs z!)+aIIZK0PFVjO5yBm0VG8xuzI?sq=IFKZ|0o`gpuHISja%ZC;?W95UFC2!B+zVfI zWjW)1!O44$XYU5oS{pn3L9F{ftOsoqQOIl2otj&zZ6Abg(;27940_KN0XEZ zB+@G~nRsm~W7^Ehww`Rv9i~uONGwdnJum9+qt(Wum$pYAZ_9s9LBG60HopiC_H#Nr zcgGn#c8d&7(o6-&3r~iEkrB_)G!*iDqJuT>uPif_TMJ!qBlGqGiieKkB4SgL3;S?Y z_$|FzTSeUa|2UC54GH+T|8i%w(}n8Zz#tflPF4f|a#7se)lkSsqFddkzq2k5_V>7H zS0Eqvf>u13idCprI4 z-vEzaBjYRMOuC;wm^ad8SdQ-aB;hP<^c858&+Rde3|bd8r#-#$lsvW(y{x8fEHme1 zxNQ@eyVfwCg`ky04?rlBi4ib*Q=p%WMkg%9XWLL}P3X0`QOF0O;5`fa4>#`-$WOh{ zZ%UzCl`&p3_F*b`lg{8~Xg9xXx6x_mNU^j?9<}Fjd}a@s-Tr}AueT(mym(3n&~x&H z6YEgZZ8Ykmtm}{IA@-)~^Eq{|@W~It!5)c9n+Xqh1~lqGe`hzy72+sNXge^A$;niPEi#jdV*E8@cn`5wUWokL@U9ItelheRtFxYW*mtIJ zt!RCC$+aJu>LJe$9X>zLTmw2ZmobwwFq521VyFOm)=zzF_B(A+G!`%q{9)d084WL4 zg0Xj8T!ub>i1%D=Cc($)1E|W5s+1JNX?Z3)cb&DgWjgQH{BWL}DC7}_)2!c4{T0;7 zG9ZSoF@qVMs*u;hN8Xyda6Xf&uc*`k_DUw)_FL)L8;#3yGW(3fD779^yNh_sXQPMW zG0*!cTz+ZkXJ4dcbnLMYRfdp&9mN~&IGN{?bblOy%-Rwsae3ou-ft=B{UuYseHUh) zX?0gw?dGS_$;UIPSVv;w6Tf)_-hGc?-V8yjEn`STHQY-FO^RtbyrCd6a?^02WETyj zQ@_h13AxpHiEA?nJwkWsCOVz&(c@Rd)}7h=KV0N1Q3;0|f1%L%*;Vwy#r%l$L|drb zI##@kBy@JO-UkR@|Cq?sXI^(+C*lRzN()RsNK5UROpG(-Kwp@^{!S0ya%!rFI~YEA zO~{7N9Yvkf@Kq`H_wr}_Y@%2}=*K+p9loK-Oed?YUo2J9tc4veZLrh^w%r8# zAvLEqi=F%u=7A-YGIBX)p=0s#1-LI$@iS#3sg;R4&um<7D275Fpp#47`gx8Z$L zgp^t_(hN;;uP;L}4uVWGmT6RO=KtUL=AVqC;OQPTcc%I2taUu^cS-yxo|Se$ReTTG zZUNd=TYmYyBN0J^uw40H^fETkWA$NDdh9`{1BK=r+Amn)D34w zHk`@-N_g;3nf+H_CURDKZ?m^XyEn`+G-sr_FitlIaB+`gF431x#o43=F0!w2*iPDFh0@T5{z{+Wvj4G1LA6VAZgf9! z4%0$tn0f%~=_>1O7O^?s{wrReb@+@%;jS72y>ebEoqQImu-ov4`TBC+qJ5bN^yg~F z;po0YBCZG%gbUnlqtP#$k_Ya>Dl-A)@H(!Ce4J)hu)=plMQTAlYK!BoHqKQYLbc}H zfv>K;y$W5?o#-UEjElXcZ4YX}G|P9$ohj(Adg$x{zt3Jg>b246Gx6TNr@xL{|CRm^ z*_e{-Cf1P{D2ChV3!NX=O||fwcEfG6oJ3-hZ8^`HCVi2f%D0uLc88;+Ho_U<&fv{T zvsit)mXhpuluPmxsHMf=EnTE3-X3oKM@*pcfR|q#HQ~#;X z{$m7t=!XU=wZAhxeUdk50XS{0VR>TdiAuf0)<_UhQKm~hV7NAi_p{V-Tl2Ygxlh8} z834s{w_}3Z)7}9G#3JdEXyqKamD$ut>n9w%?_ggCvDb;_y|a!JdjX~dFS*8hpxkU{ z#{ZD1V^&gC^YC~@qU0yhjeMEUzG`U=;b|&57A=76CbP&oGSC@uwpP?;K&l?-8ReVf z$?M+fY>q~1QU55Jl|1A(rlC;hLn-=)Zt({0$xlwCVfgs_p-z7^?&GZ9n)7lLD^VWk zYmGSFu0^d@P_MV(uj-D&uK^t2+BE)k=gpEp{@a3=c{|MJIQw$ci=XgAW8JyEE#S6( zcaL{@oZp}$$K$EI0vkSrWbO&}8k14x263v2WkPchmB`F&cq~%_4_@|X#tXc?&+!gT zK{Y6is<8#;Of?iFon;_8S_^!xUCF-3!7hDEFZE!#3gqJAq)>Zm+ns{DvFEq9Y;XtP zRru6DoF}!3_^kren<=#EDN;-EkdPhkj|O)L6~NL8^2;{v!R(~rkK-~NgPXBE1eks( z_KBtk5LjxUWWA#?bq(tLD7ppv!`qp_1n@4j>hiKz`HODyPYu_KJEypA(BFC47Zp;; zf5=4Hv1o|JaFu#-8ta9*bcdc4`%C}HpXEy=(sn{dPl9<+!@bYr@+JD~ zht|baTF`qIf@&FNQyCo@&=CqM{pI~=g(JlGFh`!!plG8_urB)K4v56%SqGBQ;}4q; z(YSuX{DiYoPKYpZ_{Z~GCs?2HjO{0Tn#lTc5z0|M`3-v29Q#OhxMQ>S(D~L?*0UJe z$C2Q!VeLY0(_VVUGuj>PN{43mTzyZQVR>aR{hcN7v8#|LLV5Qz<{n&UZ3%1To8>T{ zG#n~t`sLn2P=BsDFKVY9_tmfVeD>kWEjbDu z%Ma%zyLet`Er_H!CZdMtgc6>POw(U$CgxV<=&jt!Nu`9aNcbUiz{l1Y2kA(-GY26& zG{M2_f$tLLD(xQWIe~+FV6ZN9Zdj}E0$Gb?iGvSb#Q()R%HwyxbY9giJ8r6<>~4Dl zvRj$u-l)Zm$ZvHd#juzZL3+COMl+Wv0~6j$i)UeI{e9^4d`DtnD2+b(g-!72XVBic zL#oaFwpHoQ)VGi$RFj=i5b4i(Bwt(qqu|b=T9!{)l(4!XoAJ-@_q1{QT+g)!kT>4h zJ?wKQbH=EE8$-qoB9U5*pckVz%%$(N1jeTFh8mJ3>xid(wdFRHnFiJ^R->&q&8^M( z6`G(=PLM+2qc4FsR1iM4TdU&i?b_zfiD5% z=44kBz4o?L2(n}{*_C@t#ctCvU`EO6V9AR{eu?LMsd+xUrOiBZFClX`qtEw^r3wVQ z2-`A}NlR#Ne8kBiSbm6ux(8{IitOKKJ5RXup4Q|C$^?H1xgYv5xV(Q6eX%>~lB~#T zAE6dQLz+!ruZOJUZ8X!Bv@y)$D(}MSnLw zHINzUMqXZdFqD@h(*iguBInD)ywzsn9-jsoe2?)SbdgfL ze{R!wGM9bibc+MNSb3Tt2C~lI6Q@ZH%@07fQ*8HUxFQ$larMT4XZjj^*+4om3g0wkVpRF-833QA!794 zuX$%IfuH}2sSO%kC(BnjxkZ@|Ovc0fRopF2f#6uhUWKQBjF!m0W~|5Rll*19t8kHD z(w5@8=}bfONO^;FNA$sKUSj*gbG4Fu&_o)cr*V}}!Bs54XI_N0GMgREP)=);$?P2` zDHhI&H<4@5jw{fRoK_c3PwV;q-^dVGhBUZw@e}p|{GxifQDn@!VORw=5dr3ddf;(YAwC7Y)N?#cLvI-8U{%G~r zP)MudC;Sa#gcL1KpCPOQduiN>K(p8=jAv&TN-j}=?3BkbQM=^q;I8VKPUFoQ(ov1= zl{m{a;vBsZ7kQv*YAk%4LJ$z_rdja&_L91^8O}inZ;DoIgd_Qw zEkmI$4MWocW5|eyy9k=eEIf@CPH`Kc+r*H7&O&c>Wp$!sm)6Kt*gchW(s_D5`YT=K zzI5&E5+0-~2z@O(%|fc1xe1zKPd2cJc*pb_snF*SjM=?u@#psodCY=x2vX8L5AY0j4H^j&6b`~N#kl%3!PV_S7pG(PPJz|Xs z!N)z_e9u(Sv;aQ%T=KSixz}|1z0h<5%-pkhdZ*!@9)?mj9j*Kz*?$)r@qBm>0mbS& z%-q{3R)38%NCXF5)U%n(mFBJUU3@QHls_tNHQI4Qd*N(`!)!er2wh=Ewq%uA&;I#6 zGr(r%HKvTFZcO01L7kY(+~q!=*0M|^F5p@pj7r@IMsl50?!gS4^dC~)w1;#?p2my% zDELkVj3-el74t>&G)qf}mIhLir^U_ER62Vf+ieiKk2w9>Sx#`(luB|5shrq`ciJlJ zVbW(&=D{RiE8!-tYPic;*{a`zPuYWqJRUc319ZAbXwA9M$?MUhIGagDMl|gCc*x76 z@d%uzjii^Om<_Lm<{1U|@3CzkQ?beX^3#+}^e8sara9ATYt_1V`*O-oDTMZi4z{7p zgkIpJX%2ZHJ8gow4TniY{6u@N!6fDc(|{I1C7^w1sH7?#lEwJ^VJP&kp_7k9&&b6+ z@=M=_?8Yd%-LCS>mxrnO0%GuN_^sXXLo}j|gC;stF=(HkQX@HTv1Uh*z&%h(hcsr5jb!vNrmNT8Z4KoVcJONRmT7|ALN5{vQ84jtgP>C>9jfn zv8^JCfyFqL`QsY2!pE#G1#}-!$oruRNASHfqL8P>N$q1s(UShyE6|$TqgL8kd0*&j zamH?kg0k7vojmpz%N4ra1`0JHtmLLGd5C?!YG8l=h|EYCi1?Z1^pXf+r-H3LZr)R5 zWh#3z|xDM58*$#5N*XXREIXfd6!SGYnPb-D_r^9LJUv)JiNr2%`vD| zZoa#h9>YrHMW*3k{Xd1gF8=92cWFkxxy)Zup6S3UI47YfB@jZlgEvfdsr z^)(k^wZCg!Y8whEx|)e7XHj;=AxoqO%9B_b!d>?aCv!`h+;VW& zMH==o75d6uSDAI@G*5bKIQ%*I{D4CKfBl_9NRA|>GV!mV)Xw0p>yC;u+89hKd=ylp zAolw^xa)e0ouv{eM^o%;)a=?mr&l|vj)Kx$8dhqw*oxiMe7eN`kQC~JkGhO;2RWe| zXk=#i-0fh@JVq5BiXtD)Y$gx?l;n=@#R_l{x=l57;#bV1Hs~d$!8%sEe5QA%4dxEG zu!7iSZ4oAOo^H+=Yc>5tMYLbAYJalY3{=|6ZKS@eHmf-$z9!k+hTO(KruhM;)K~Pe zNc}w~PNhf)o#hT2#w4yDt4%$w!$6oP2k1ihk9p`mR-1OXUJIdMMdIjfVzRLJA8l#K zN#}>{ny?un|2X_72WW@yuSL1m&^GfH#bgdE?FzDScTh_-=CG4kY4g#(k(sQJ$FP%m zdwR(59ifVRW&RltU1cQC-f(7Nf&R`UG7}A0YhJL@PSStY2PUyijLA@i%8?R0%50#C zEsRw50|+YzpcnoiIj~2Y>3Ybns-T)e_V=3ffRl>|Td9F{Auc}A+z*Amr12!XskeOl zB22!QLiow0OULy;Lt0=b|DIwF_=~3A2HcgGP-{EVF_??aczfz3@-l4zmGDBH=6P!= z6cl}uof)*m{C}E5!pU67c`o&d&!TAXHi|Ki?1N766bD~3xbzD1$n?f(IQWmF(1(y; zSjbaVj1@OC*Wfc6c_v6t0fjv9hBfHxGK0^|4(y4cE|b9FxVW#d%9pm9a1$ruxa%M_ zqWP;G$<&XI_RiYwcxO>~8`J2r8w9Cx9O=Bvbf`sH`{6Y)n>(7WFqygqWx~MKZ^Ity z8ELdp+<#TM2Z}K%slop|Qn!I!mKFc{0#>=j{mG0+@td0|;XngALI6)IaJ2 zpgf#6OdN!jqRz`Mi`ND5p|+Ny-hz+14$96IW|G-ZiI+oXjwUOXnW^Mw<6ursyO_<{ z>Al&69^R2XTq*X`rI?kqVp6&i#aM@ey~6O5RN{4Z)VI;71y1_ynGBpIn^s@+NGVYJ zzAG8kNHm-)&Zh1K(82S&ZfL_DO;GB5N(2PKUNm9cC%w_ux*HE&KN1WrOm8^7`Iw6i zf-+)YGJA{_WigDg0O#ZwGpG#sZ8~wz$z*J4yhNYl3HCHE$tPuDPc_X}oZtL9O^(Cl zZk*&NaFVq^h7#H?n^277+auHzP6TP#sAH@_?f8_+URU% z1n)V)4a9$vmv@hmB#n`)k(>YCpVj3hZLJgVdo_e1RfRRCCDgb?YkizfM@efmA`xj+ z{wbMNhoiN2z-e@^@`(P@xa&e(=SX2US4-JTDy>jz7NOJlgm$oDLuq>YM}y}}e8Z|~ z8|rW<3Fw2I9H()H9LirZne)pb=3gPu$rDmfk=L0%UZrv5BYmyK*wM@&lb1od$^>$b zGKn|q3CC}(t81^jzV|haZn2(>?)lC}Fk-*sqy8sLxY)bn;!HzcZ7uX0`My2hg zaF7qBhrk4#IE(KQ>Oo!T;PvnpUU01DeKQBz#U)hQ8r=J@Y$b8g`>b&m8MjwaNJrzy zz6Y6ZlJ{K9xiXe3J)3j$b8u%sqL&Bk>kH@w$59FVqm;&~{Q^`XSwe3BT69 zgL%vk&Ex8bud}G{rT<%~91`u{>vhqgInY^J`;SfrJ4y6*IKEzsWuZO%g7EtR=kO;~ zviz1i@C6#95@jGQd!J9dOXB}8icMV{eHWNI4!1nBRK-93t3y`!6Pwcy0r zDMPy{PH*^FOCfano9JY7NfeAm8J_`1=Q5r5B`m%1Q~n15;~Nu+*AU?|ic7`f(pOGy zgO&R93zc#d)w)5$|K+aiJ?1NnN-TyuXcOG$&*r=6Y34T3gmS^LPd#D(rg)Xc@)jJH zO;C@b@v+y3$2}V*B`xW_nP}71E#+{IS0LBY0hM|mJz{y83Eag~wAtnsR^evdNA~rH zw4annb$nIX9X>4!U9lV7$)0H66@N@fj<8ZRDfSD!8yw}o;vM8My019bXbFzZ>Sg;& z#Z7K)ujFM$W)vr&R<5&EMsLJ2c0Y<>F~UUkGu&QvB-Py398_8rcN2qQ0w8b-$Tm1FC5k= zJhVBbO%U=jC`TZI)>M5ChQ7|+r0o}blDwh*Wx<6*kB03J&kUV>mhDyXaiuH%KXmfs z&=0|N{Yl=*o)PX!t^&>wJb00KlGZ7o<(jA~#iZk6a|o9UgbMURZLoD>dXmZZ2-e7Q z>r8qkr^7(mYQ4Z;=EjFS2i-1|2FzQmI_vqn4ojuwCp1D-u&cPMZ_)Sk-sx~>^|bTe z^HmHU7&zO-W;O;kAOTs_dM*ck7wiGsUW8th&S-j1vn?g>lppwS^!hTTQfR6DN z0*Bu-*8AMoKX`2LMA8JC-0h)7d&n;SvxmTBpDsU^%D~*oi^I7Pl$nnBPIo{*chk(Y znmI{H+MxtycVD5Rns9d)KslZY2}f_Oj&k`KlGzR%hD+!UUV*>;rqmCIX?puTPIR}J z75#8Vy1US^*VtdpKRmTbv@bi}oDLN)RBdGx&c|?RhM0jlX?oltSvhGpT2~@#>UgO4SzXL?X(u-BJezPZDhEb=J(bUigi=3-5$6Vz6|O$!K0BEy;ou z7!(#d66U+Fd7Ap_`sRBI!d+RS_2bQ3oBrk%q&OmQ@qeV7;Ek<^?Hd!Ia8|(f7CZaT z@yy~pOp7m@_CXw3VOk2Y?=18aJ%33z)&pD|OzF%_HgCcpxJCEQd)|7QbW9o|m!w@Z zj4s_$+E8aA`t4Y6U+;Ez3%Dznc=i_9S14Oy_x>jh6O%}=oV8UYC*GLuUWmJvV`O-; z%@GV@TCzxrP)AGr7KS$d;SmIts16w&e}iI*0kL zDHhjjK)2q?n`b<8>h3sy`$O*Af@=5==f^-iHzuZ-*HQ1bkW$=)>*xUQfR`|mOG&?R z->ib1xgJWg?5yp&?0)Gk?z&8yXEV4fRh62sD-8_)YD zEuA2facAV`#GA(W5%Nhg`zteE)EMT&+l?QM#c{nqW5=Er2(FTnscdKpX5$4&j~%9SsVTdy0&sZTJdfGA{*BR3M+pVQ zXW|NJsN4&0{{Xy>ueGMGk*8_q?Amh} zpWxqY4O1^Od(Gqcj8>vou3_JM1b^XQeK>0RT*E!o`$6zGDw+1eYdvYM$gFq>`P{9% z6Vfxg8JFtEXlb7g<1B}>p>vs|jT*%_FTftR18>=H5Y^`Lba%4c!UJ{ER1@FhAX3t2 z@zIy!``#w|JPD>^V@{iu$!RuX&pir%`9<92g<;$sHw5#){}QI(HB)ok)g$o1Y$scx zgMrl=)|g&Sl0PUCZ{fAtam|SfZ?KRe9z z&PJ=|W_I{ZAg;JM<^Sef^8?S5LTWt*b#*N&N>+B;`wT8-2Vaf7NjHpPdUY86R0rd& zF8b{i*gM1MHC{%dDN?JV#jAr^TdP4c>xE+e89)6bNQR{?8)zPgWoI`Pp3h1CZ)%2X zxaeEy^P}gzBa3_xGQ=93NZWAvJ=JA|(9sm<)pfmtd+`{jyG2HqX*JHTBTO#Raql;T zn|cK8zP99MZkmr=!%@dO8Z{j_zn(+z48dEyoV`^k>m(AI4N#5?lg}*$4Pr0~>Rmp& z;s4xE@to}X;s9)c3#%(9&4qA1U+bKlYv(~O4QKcL)KC+*M1A&TJz0TwpU#&mbq9Y}<;4 zSp!mX3`*Kz^%FaZ!szuXEQB`9e{YkI>cu?J4~OC-Q?W0ou)&5?kSKEUYbSEOOF?b@ zfMT~7#WWr^!LFe5@Hg-ElXZrQ3(PXFp#py$-#$?s=!li_U7%QvaBx8T;DC6{RvD&g?Gh@-v<*FD@coz;91C)P`Nd?WBWF4i@|Y4{!mXBHZ2 zD>U<({M!O=`3$baQ|PrZ+1B zB{HZz)q8NY)<~<5%upt6?kml3srV2W@dwwDWw|UNrob zLcz<0l34;~aaaDHqbNJMp~(hx`=&5fot!$2OmB1W-fM1Fq0kLx5B`&O%ZWJ9Mv|p_ z#4hw8nPl!lW)&~lzeaPCyG?RtJokG&p0zgk?3SS2e&L?(z}@x+rE)aWf`D%BM8R~T zU>3pcI)uC65mSqn{PtgT6`3BUWoDRc=*d}k6(`-F=Jlz*!~1Zed(Z{b7RTj9Xb_u~ zSxhDSliaz6%cMBE@f8Z~hnVi;>^_5r@)8ZcC<@wq<{=6_t}FPptE76nb?D|sC@5J` zZ@X|sE^_bHNOk!ZWZn6oZ_cXU5|{5R=GCv@gO?-GaROp+V>~KV=rLbUlk_^g2i>LK ztne364-4UQJkC^d018%V$SW~;9LM2id;r&}4*Z2{sPkQMl84hJ8c?p&<81dawP?-E z;y6>QXw;>L=(kfytvBGkTa$V9L>M49@s^k1uHS1L&%~%8zM!(oJSMf9lrhX{hVZnX z;nR!48ajh|*qa$uS?>7Ssh=LnlRh6Rv7o!b-QEM`Ham*-|LNui$T!8A+02C9oSs!^ z3in-3-b1hTbq$yK^w-AmeEJ=JD*;W99K@9V2il&iOM9pea4Ba*g0pmm9tJn zGxtIPc!8t;A}h^1bm+qRx9HYQSljNwSQ&(eKOdg{K&xjE*C0E8O;=R=3p{nzm{~rD zKr)9}WmCGno8WexOp@t7v%0b*iHZ^SWr+>+!W~{DsSPA9SU8 z;?t68d&R^gBjmr5=t==Lx(J730W*_|{O*mE&Grs7b??XJvmJl!4?K?D>A(2RdwnzB z=KkchhA|i2#yi}Cr+)(Lsh<086>Cg$W+qWwfr8v|jd|h&eE>gD?Rzt~&A=0y00m^6 zAw7Iojj2Ih&fNzs?W|d#18iiE(}a6|fbxK;h1vcThv_ZS3@)Jx4$GUIQ~EFyjv%?@ zHm+h~a1(tn2Y3Byo~LkJ%_q3ON01?C#FN&D{~Usjet=a!KqsF|jwl2V>SdJ7H87Lc z;E{O3gggs-?D6Eq|JY6n^T<%e(f#ueYH$^r7$84E$Sw`hZ5OBITD;-Xm>aW;tZWQ0 z`O_FyuzN7@?I-iQdUcvcl%p|96c|EnV9Uv(Oi|e@NeF30o^>nUO7t#!cV3|RaxaX@tfyE&%CD3lS(HaPmVO+ zRNnjuCPWeI8|z~FErTJ?yn;@y+54$&9hdBDc;@<%UfPAbFWA*=^{3!`flWnYbQ;>eZL=8;w?6tyT1;z@jOfq@{y*h%l>92yPIdQ z)f)3Ye6Op3t|%BL<2_wO4?+riDK(&U=r#R%?Oo}>^ zp88-ZfohuG+{|>^Sb>hA%H-BYuz!ERQ`D00|C^SXE#x|e(QDh2`OFZW@b&n-zq7Mw zz|QIxSABy1EkycD%xaz(2l0m4NV8{pVV%%k%mMr5398x`#iLHpX3=Q5&o)8nhqrJA z&-@!sP?Ic=;FE4<%}GErP2%cbK%I@^^ONu-1bpS6SxwLJZ0&+CbON5-hftY!K}Y_+ z`%v8m^JXsv^Cp{dld(7xi*CVPWek3t4VJ4U>8cJFY=ysha26AM3TLIYTqE5**-aZ$3Yc%YMy*FM>!ox@?|ezE;aGWiO93`+1M z^~2KAa>`tijBGIy(Y1|lxr6c>UZGcaQu z0e#g)P*Vy+)s5v8IT#h^qBtBnc^275%Tr-BPFs(+e3t91W2ikRYS9PS?4Kk7(pEf9 zm~!MvJovt{npd;Wx`B&1%y^L_C!w@kBV~8@C3q8MRbc) zW4Nh5D{E!*cJ8)SmM|t{4a9e}xpsrNV^BUR>FE`%$#4GHS)0IN758K3P+UkVtpp#G zZ?Z?ONt@_Pu@0W*(!ybK@lWAjdq_0(M=yVYdwmq?mZJ0&D5Sg0M$MR)KDhyK18+ek z=mt4akMH?5RD=UC{B{VjeD-{PaT(R}n38Net3E@u>EyiPs?5|Nzvlw9U_EZfeI&GZ z;Hv*2tlPshjeG0?Dfk$3 z0<_RF@K;Pi4>auF;uk)2l~I`g;}dUE^ng+=+cdaAl_IZrvp z+1o*h?ux5XXXRdT^RLT)} z-aoQ)90$#-7+z$9IE}p0I&ocN=*VFA@&t^tol~-)7whGzu&=fSUFD0!`lLypavx6@MhabF(R35~ zq2nK*Io8H~x=4IZc4CcHkVZ*gVHWz8WW3eo)y&!h5^|}IM^2}^6YY^-eBHuwM0Cj# z9$6uLF^uj_%nN*^iBjz;%nQEQ3fp?K+ssO;#myNnFZ`3{a4EJ3?S*Xo3P&wTOl1b) zwH{!Jhsb=?@bXV%knkn|6U;nsz`N#{ygp}+J{B5e=w7#@I?df4&6>2=rlZ1g() z>%!t9WPsTez(yYVlvGJ9F~pJbnG?@Lb0Fhi?--*HY%63fMir4JDBfG1y zd$mXK_4k(xPZRD$p?7#TLxeAc6YH1CYGA9XOd-uu2^YVY`!0$+PdW6%iIC@?nb(+m zm6eHHFONmimGCI?BAJJ17AZxq3Nmj*nWhx(VIzCU<#Ne7>((>rT*wu?nSnr@4gr zs%d~Jj8n#RRN!2!_TTY(JYaqQWH2!)ZNgu1i5`gF%)|51DQqY2kqv#ctau0CPhQwB zr}5g2AX~9YJ7PCETe`NoYkS*xx4FYfPj$AJ)Ff4aR9yu!`XSzPoyC)U_F{O^3H-`y zSz#YS@%o4N+(~FF!yzcwgL%>rg?<$8oC}=S%J9FxYb*o>OMuUwfnUJK=hqR_(jD3q zZ~q7Rx^mO@owsWx$7<(0*8Bd6}DEW_T6?}c`E;wimx#F8tR*}s~N#w<02=|`eyf1*%+Gz}ynx{?Xm zYdXE^Fq^q1ZKF$WyX_QY{xXhfto8r6`#LR-b?^+ElVa#Bk3h5hDCU7weVyNX5-qj8 z$Pn~n1`|jOhN34-;!K|litjIWu&>ZZevrt`!{0HHot2Jmn68Qsc>^{Xx$K9wbS-O7(lDb;6LfhZn`9=>KypdO0cW$%^Bt#44P8#;&12+lTxK03(DMDbh-e2 zq#_BnGvZ`xTPTvn=!K}QPSGyo$mr`l2wN&r{Y&S@caoB&tb@cIoTiFeCgUrw2tzay z8bwJ%D)X0U^s6TrM~xeEVL9{eF!;YhAAWJMz_hgvii zwdg5li4I~ExrYCE@{-XFtXfluTN#`U?cd>f%?l=k_tKo|f?qnDvs5npA1_IXoMImH z933LR{s||<=Fl*H@~N9~_r-^f#Q`;+bMvLpuc28uS1e*@AI+)bxxPNnU@Uy@A-J#p zGmquHYY@+hE9kxH4tr%7q_t;ScgH-(XKkk15NCG*yibkz&Cj6P6+t_?jPqg|^uYdf z49({Z@rYlzF6XBQoTA6!D2+k6EW!yk(B3(kzu-2h@Ou2;JVzs4#Qir2pXYQa5dYHN zS%}7=-8elfTXRUNoKA6(=@^6Wt(0Rv39-N2arbeb$V^5?k&pe1>tT%Py0NNpC$qOB z+|j>DF9ed|*XgY5f!{1L)Drre)B7LDCq8uR?j*)9L!fBF3Fj|L-En^XZH9kvYm8*= zdv0FO%AZfnM6T?#bcAg7cUw+vm;EM`r7yOF!G^6v)>N{|CFywDLPDvOX*TOxAHyfk z3vT^k{FdQ39ur8#=SDerj52uuZ8{m9>=6n=F0Q~FPP0D#?+&BUj)MQuo7HDJdeuAA zGCWw>Nx7XM(=kTs2#I06?UvfaK9_XvG5SM0pjVEyF2i;4lVoN$^A6Kr&X31fLH6lm z=xmLL0rHkfOvliiw7Ojm>NXQlY~xX@w(ysHgHYWX*ZaHBB0PyNbu}Px6oQmo$C!o_ zRa;zGuPvK|3HV&gbDFBmJa#TmU1RzmCa}(w;muNq){A9uj?!65lAHOLcgKRD!#JF8 z-j+_glPCtog1q46A)`XNpp-R2IqLzncNw3b4!3=OPV**C*avk!GAE%lB89=N9capf z$9KPF0yDX2s|#l^ic{u;we<1?;{4z+crFi;(;;X->4={U|!M#Zj z_iZjysVs2mU(q#nSI$Ix{TfYY@28fw8I>RSJsj42Vhb{2`^{f?qfJLEtxKAq4(H|3 zxcsi57M8%ze++MFYuwxckFSP8oD03MJ-**VT>aua4VUm9j(~zug*&g7;SL%?L3ZBj z$g`9XLfCa)CQq_YzRPT23 zGnptT#amECYoSuQP{%W))!I?ZYvJ+V6!JJEXOK>AhIY`~TD{i>( zMYt>;W-_q^3dRdtC+)Y^QH`>Fz;E!xn#t;cMbLxE^9}mA`#>TnY1lzh=?eF;S+@s` zD2x=v8uaa$mY;Ran)8+`;6Bv!uFZ`%zGG9flu#;YH$lO=78XL-@`g{iK(jqYp54G>0@RP zeVGpYk4_$7qg#RvngKTYO`20XL7fWa9zCUtq7fk{Gx=6%l?U(`SLf583rEQmjH2~v zGs;a2dmR+~<_&+jhaYOg^SeKRc#MbOA^Lq<)8jee7H}WZ%SdV{hFseKqsHV8kaWo6ceEK-08Vd=xzM^ zQMk-oLq9r#MqMPBXYitx-qls6kD#jIKf^F4@i$FNQK<6>Y1!u=v#x=odQ5p`8=_UP zuV){d54Kn~sW9x7zQQ)n>kj<2+l-;c0k|u>>eK6&F^~JmTGN!N<74ixQG8xC6!L=n zTZv~r&DejVF`C>>QtNz<`AV??oh#$mj)`K)yK3ANarQ__^ z)Y)+Ss^U9n$!fEhQ-j%3$~+ZkcRmOZR>N$(1;=5jDZ2A$u_aOHuRypN%PP|hg}fQ7 z&L|Z7iy>)QZ3d!I>(TCZL5rS1&s@C01p}l%U5fX~Fm zl&gIBoL7-zDa7yeP*)XNK>=JCvCQDtnCh{^yJbnF)2|YJUy>X}gXLfvEbWe-B(ZOk zmpdq3us(yHSPkCM0kg?miwuti_R4S8Oh0V)-sH9(vXXaU&9Ts)c?~}OQT|OOy<>t0 z(*f7{E#5L6S!eBdLO$wy@|KyzTJwZ^E|&JC>p~J|i*DqGJ17frJ(Xd1l?*kr0Bv%5 z*$n@qjyM^2=?`;N^DH!)+Q!4EwCCU=|3#r}h2!836tlh%)pF30osp}M3FcOI-toOy zhp+O6Z-|!tQ&(S~jB2>cP!{*YQ0U|-w5HYW5%zPuXPPRF z=#`4YUHLD0y>jGe?s7^?;@gjA_r3yG$vY+v&H4P7D8tkFw1%{mR%9m7koWx*vTQFx zRXop$>@G^P`_$uz&Pb{?3J>NW(hRpPYjD*Uge03@{w9mKAIE71M-Jy$dtU9SZ8z?| z?b1zI`OOpXb2c@m;8=dgJ~}_lrGQ2r9qdNm%d~wulfN1K=WeJkzv+Ex z!9MpMYg{}op!!S(VvP?;&AHJwdeg1a+okXOvl z+2XFg3|BpeaT_y{J8;?alOCE1E!t##z@GXP&-z1~sv3N^qOY+k+H5L&tl_NW)zHNY1p9uP^A{!I_sB$EbvmD2 zf+T|tWzkOeUIlhl^GS`p69WC2W$BvA$!V&InuwAThto=R?uF0oW^ea_hA9i_vHmy- z^*A8*qtZ^t*FF(la5c}~CsyuuoLkb+OR=BNo1vS^v^NQ-{WSahx4;jO>6rh>*Rt`6A~5Q zg^HZq6;6@gPz*xYVMZJ8;o&L8SuPdQN<99q);x)w;QLJEJ72+LRT2gH4*ZjO?B)7% ziX4L5axr^~$HEj^?#!Gb_w#l+Ld%m4g?gK_i2FTx_?^xQj@K|_SKAgT%jIMEinCe= zi04p=6YEU_9&gnlG<*(SkMRLL%k5+6jwleNTLzu+( z?hkWj7IcUMLPzem6Et6RkZUP*ZN1e|d~?m&%as|Q@dtNb*I&nSduN8}KW{)`?Pa|ntR-bvOPKdujhVq^fZY1UCTe-@y&%#@yRUf``_4ljxecAX2q&s%5R$*inp_z+ z^i#1iT2&-jsw|fEIG^s~smy75hL^HCu5v%;+7Bc)KH}){qFQu8FTT&(GKP~|ahM!g zQBLf_N*I23aW~~cIlIg(XoYQqdJTSLRfsn_&r)xqf1fwZv&B^vjq<#vL%;;UY0@1&t3!~R&p zE;AqPL(j!l;x(bU@WwKN7S&UD&cz^Npt6O++>}Y!#HqS z-^WpV3P0sN8V#M&zc6QNkc@SyVOj~AYPaJp@9eqi9phgZzR_>?jfGC0>>N(dSP`u# z`SiBR3i-K|U)p4~(dlOvm!Kd0i!SQ2q`*CCfxBLYjqs9Be2$w$r0K7fc^;l(2k!fW zc$(wUiTlD)n{18Xv&W&=cx;)~cWS6Tn*Pigt`F`QZ;Ee9SW3jfFtw?Zb+*!_H zwtF;(TG-Y{S;Lf|i*&_W)_PowrIlm?&0Ckzzhh{Te!}Ts6Wob8=<#c59e;vGT?PI6 z7_+b5!a2B3D`0i6v;MU;0s6J9?{u87`Y_kCTw zde2^0H|XT$?1fS3`;%$;Cf9`P86|DD7RHU!m^EM{Zt851Ax_}op2Vm1#XCKQXF8dw zmmd{>sql?S$SN}EW66$8$J_BQC&ngtOEPPJwTupjvyy9)`>7|JZ<)VRc%8^CS=L8n z2p{Gbd`CU;?rN@l&b*FruKyUG{vS$xaviyO_m!dBup1*Jtesd~$8;U6D>e=u=}@0}cEFJ7`iJ z%Qqi^Ql5xH{sD!&8@~Dwx^|Dlo>6QP(=4kbi}|u>c2S7x9tU7XC{gJe-?RXf@kCKK~F?xVH|UtD1YA z=aaX&KTr7Qu*@jrX3tiB^TKo%XX1MowslhWz>#gvJy(XgKy~o~Pu&lcznYdzB&SEh zA&G=b{uRE_I~Zab-q$XqS00$7S>JA0kzA=jnzR`1m^Q3I`+2M6M4vuq&OxRijWB>WdT&^z^Q?uX$I=4$^wGBTsuB84 zbw^w0MwiLc$7}Zg^trqnV4pm6th0|Kw>W@4#glw?GoJNO>j?3S&<>wxFH1(tOrG+G zrWs7dHP*VLxH)F=79Wpyd=JUMH2fWdIWf7+z1h3RK&mg#lh=|-;8dn@cbT~lB)?FM zCWbcTg3mg`-6K6=K0Dd1(@X<1)4X#)-Ht;3P_}c;_rMtIPCh?|{8nYld1is{n8Fq1 zO|#P2jY*^v|J@tIV_eIhQOKj&|IJ|k>cr)K&QyT;MI_H*UK$i@;&7S9_x~ZCm1ir1 zZDTmW?67}g8o1D1${XvAbEkF9cEs9q(~@nWS+AZvk)3@u>rf_~Cb-d}j@qVkvNv|D~=VgZThV*z;;&HGRLT5<}9P)qdIP3$If zk`TSkPWm-`?tG5X&bzLmo?f1vWJMmsqaVt7t}P1rZhYj$N$tH7%Hm;np;=1iMfm-a zVHcaxkw(&n?Sk+41a@9SZWE%9`c3Zj29I6D#f!!o_y76wy&1Ar2p3SLh2^p=& z`1Gp;_ckk0(R!keH^7P15p8r4O8pNss^RRTeO!TGuZ>2#oW7ed?!G;| zWmn>}d8cJ_^o2i?$sOzbY+s0zyQZxYSA7t__%CuIQ-ntlXI8@UngB&Cp5OT}*I35$ zHWv?5e!arp@(skum+b9~_+jdzr6!YBtcSBIGm830dWO;j>F8H1BZVkfx$Du0i^*Qt zQ$DpS^MPy7$veA_IGWgvups_bQqfNgQdR3n<}ogzFJ$z5G;JB#)4A~V#^8F|jGsC` zyy`17NhRXoi$|NAi{s-g4xezY#1a(R;z5Oc7;~b@c)JeZVV3YP$BD(Dubf9OTB|H) z3Z9uK?}9Vc>7zk&D4ipXa1?iDPjL-}ye_&~T1!Lr^VuO;MjAIT`FO&&u7c;}Iw!S$ zII07#mmHjIiosRv%|h8)vsy1jB)|5&fWz(}Th z<`1d#1CFaCqpqt7uuq2Yq^-kMt8k8+A3VoRW+u{x=c~QpJG=GLeD+!h7kNmCU!$`# z0d;%~D*0So>}PP&hjBd;QOI+1N4|oRoPzV@HOcJUOyp-bmQ~dgU_xj zx@1X|gwmX*TjTRxjjK;2O_0EySeD=4gg+%S?WqMI|4hZ*_7z9vSiG#!l2!gqGQ61D znX}Yyn$<*_OV5(ed}-Cu=r^1m^bbKV^+TvmCrO1~#t|N>-^s5VhC06iE_&7A`8^Fj z!`~qWRJ^h{xEGL0mrzaC;HYfMN>G&jeGF;FX|NDJn78A(Da5+-kW~C$dVlWQY;;Jj zwwtv>bfJ%C%D&QimR6I(LPyIw=3pi9c!fYtO>3BipXVZ~Sv0@(O0Ippa)rQJRH*5QY!z7*4NA`ri<;Lpi}$3ifw)r?>b63i-02Lf%K2MmK#)dj~Y? zskYimDO^^)tkdYU`@q`T3F1u#Q&XCqO5-kS0k3!--L&6P0()?^GlX8p&m8FQ91}7L zg?wvJAeVo`RuEB zr$#}ch$4^Q0jAbTI=BNK_G|P_1T?D!WK=Go+IV0!Pk_B*Kr>n&G67F-OO)!Cc$mka zQ=aEH$d9ISf?vM_^ra}y+g6-7x#5ot<9v}GCcq@25seVC^bR_?YAeA!KA_X)wEbr4 zoLSPW#l;RJ7cS#rZ^Gm=GkV=Syi6ATYM$w@=yffFdfjF?2+e~Ec>z@NO8n1*(9Euf znDKlrLbWQ7?>jx~(laO+8I2o_O-v#9G!o$tV3T4+-0L1Rau14aMclm;@w5h- z6vr@~$%ga#nXWdy5RD9vP_0U{2U>3)iucFBneLKxy|ht20yVdec1Wv4o8P~18!vEj z(}~fzI+MuhM4=L=aK9fyFM5Qd)TKLvR+u;RE$Z9|yu$_1Y0dCI47k{%;gR&m*Ln|~ zwio_N5yxFBld0V}3@;dZK}5KLkGU0I-akSLoqF@(-mIfj?;mZKRz&@z9KlU|3e6<5 zm`CV@gZ?s&*uC)67KcMn0yl45P@nIIlleJGi9xX71AOqzc*xW7`C&ow%Muhk7YUXf zxc58iE(BHLf`(%>B3L2k#^YnwmVc!JEYpD!!S+y9cN`rwnokd~(Q7b~u;Jhiuvg4*Z_04*C5BvudDNcgA_VvA zSsFCgv*Pn+gvp<58gFiBQOSxOWGXd)oZvzT-Qn6noED#z^C*?6`a5etRvk@S z`yJDAb0?e-e}!A(KB)8)VZ5ESmDED*J!s#^sJzG3WPvu+0Z-jc_7sgw8_);(@x=AQ zy|@zYOu)n5I@BNfjMZffcX@Tbf51atp2^rip7>O93pMHQe1t+i4-Kmw+F5{-y~J3P zbM9{Qa2Ru<_*gsxk$;nXS$S(~r4_W#Q|r^RV}*@g1O~zcdf>;n!P`88r&Iz~?CehP<%-GZ9 zG+&3q(SiP}G}d=K@3-Wyikq2KPa3M{;4G@iO54FYktVf|_z63hcS1XA!hKhc2ETwp zK8M}JH)g#(V2Wk>zbow|uJ;7IRN_k^r_hQg{sSkKh48rt(%&~tABI96 zhd%lcRkjnKZ{oR6MIS%RTjo;8QzipZyk%zameWwOcf!dYrhl#P3hQVhsf9FO(U1aDEOZF6@0rp zm;7X-nkDoP?VZ0vLW48t_RN6K@T}F~H-FC*b`Q?|^@ig34*Nh_x?rBb=`Ix4 zTN0G30rF7T1UJJO@emOFN*;XNRjqx*O|)obBe#;mR4jqn%m`+&0T+3IPTq)& z+EbqBc;4r=nGu!dKB&bCGm3Y>EmoOItjRY}if8kF?ZNJT3QyZncJ^Mb`*d=-Ugjdt zrJM2_<&UkLwja+|3HvK`8GNyLG~#)vB!9@5k06s7VIG7&R@ZnAx9T%?OVPNv6PT}O z4|)$a;W?PV1Zq5f_BFiO-r!!Z${zQ!&W+FZ7BkRf+^yG*-S9geHFrbVc*?H6J&b@t zXbRPA9n=k4cAS1Y=`ypkt9&fK#K-L>A2<)UOB5RAb$R9Ovkgj%uv{HoB2!`CM0KZ zH~g=^GbbL59BAY<;2TZHSN#T^dJtZqtT@OsLKWB1@|O$u-6$ro*MzxZEmT86POoIJ zdGH%8u)Cb`u1k(~_HgY#e2mE?2wquT%w`ti<124jfi5qWe!sj!ed5wp<5ednU zx-(pZ8BCgo@ozl2*n^}IW%{HiaLu!#oPIHMF+S!w52)0|n2L<1Yw4$Wz?y(^H$WLl z&(@EmMJT=qtln*T0aJSYY@G@#Z!h$roI89rTr&FrGHi*;<{^;VxZ%$ zn?2d_5AIH@YlEXgutD;Ia*-Yo11;f0(T8$D{rN+d{0aWx4}53^lM^9@Ki0bpo#;3+MFM`J^#SMDnL=95lCR7|V1CRbJC({WP?W#mv|$c^ zLqldIr6GXD^0^b3bU&xHv>U6sMtA5ta*(&-M?SX<6}&KS+FPTfPtqBt?mKW-KGHNt zPv;p|eNS~?C(n1+P-htAkpt>B+RcvhW8SkIW z#&^)rQ%POEFr>j-AA^Q-z?hLF>qgZ1c=LC2R~$Zl={Vdd)^*ZO+leQh&q{q7MKwicN6}CE3}4n zLm!Ve`BAS_&e)|*EnxYcHKn6ta2~|sik97|^NYFW>!5Btwa$}bXkYkB$Ieq`fIdef z=Q>wLPaAJ~fA#Qk{=MEZo>clX%Q-~*A2provK3c`LT7h#n*S^I5I+mUP!o2-h7P3x zY79kE8+U=g|qhy*~gjOX>C|t%F~%zm(QLL)61mXP>$JlsC%@# z_6(?nGnfbU^5qU|712EGyf4;!7dm+j=;SZ7m+EJm2&s7{&Z}BX2XoUgw>*6k_RW z=u&!DQTJd^T3;uB!|=>mZiW{MTj0y*{m( zLUOz8NbAZ5r}&h&g8y#Vp@>b{E@lxUdxqcfkMa4q|N6PQIIB9!*n4YZ)!nwVT!TXp z!Z*X;*lBHM{Yv7d75ta4!oN_^7xFEa@Sm62r<>_So601luyrO0v;opLSYDd4S7~U= zqMEe(+Q0T&j#m&iVmv#&27g@G&+zS$yR#0?+9UE{xQ0%h9WwtYS6OEk)C|8?MIC6{ zreHcQ^T@E*s|oxQa)mB*jwK~uhnzJ6-QroK6@Uz z(&KE)@!XY>*KqGoA-gt|>C9GA6hFA12V08K*qIr3$WwmrKlp}=Ll#+Od4e`N5jJ)! z@e0hHYbazPa-!S_FW*bsN$$A)Orw4|OSva{o_Paw_IVM1BC>>c_uu!n^O)U9&UTK{ z%tZ6zHJl0O%}(RkV_f@ZXazV7z2-f?c5WQiTj*w}!z3t@6ouU!1@Wab`uHtoLS1;1 zXNPj5;vg5TtI)@9u(nsl!T!{C7s|tZdq!tTS0DE?PbJ?a|A_D#;YwIXUm9;$cP3oD zqwVck@B5M#yeCJZpIx#RfW4ux<_b6h3URjXiQn=gdcb_t(2k~-rq(1yCgY%cWC}C4 z!N2N&mj50~>m%MQKS`?OlCGoASBKIYqCQYF*j3&x@vc|y#@<`LabZuw($mH8!rjhg zbKZkgJr%CvCgr7EnEs!0R=;%^O|?y!N7u02;E5K^M@>E9Z)7w*APKdFiQsm)7MGbg zXX9_#z^S1Dw4FR;!tya8s7iz2Fso0xDa|7NS_;08q~*6agUbKjRhJ%yq5coLJyq~viUHUr}cAS48dl_kl zsY)aFCU)*sOsm;Z41)SJ%94)fAwMeFaBF@ND_ha$W0*xY(nh1xWpq_`ANIuiu5zy@ zxSg((jy~i?azg^BsdSO&!UD)?9nNPLVGgdc!%b(Nh7Tbb{zU|Nxx;88BOttV z#&#I)acXJ7)d+#`a>vx1w`)6A`Xr$+6Po3;hf4BQ6ynABEt0j*_9*9A*C+QP?=Np% z&ws9lD8)PI{TXDN#1!;AY^z#u@UNj?Eo6t$3)fdma#~a1iCrcs*whdW@#H<)_#K#u z@Aa9PfY+r>^bGm1IOy0VNfHz_pP+*y9TU13dQbL|w=a&9^(S7^j9MgD|AaHQ`<$nk zcYymlGnt~ygFf1x(-&*QS3AVIPs{*8b`7ql&gT23x~8k}bN(7u@+lJg%k6Y_4#EY| z8ojzNPJkrTSsm*6bOQRTq4RGi@823XXG^t@wvB{XXP3*< z!ISJNDgU= z;Gf?*k$qkh6uPsdP}{M$%0-7@7@4WctOrw|4SW%nLO99F6#QDSA3R0PWN+@+K@-L) zx9nQ)C}d9q?c^f4*xUF%%8?t`A!HE#;XIcXf9F*^M>pYasHE}Z^!adk1{Cs@cs{1E zlU{;ye4gEOIDf%X<`gk}eiRCEK{SKT_^S?ChCtbPA?`<`Z75gZBvDK42iYpzxxBKN4n?i$RDA}TctbUsGg5A|gbc0vwKTM{=T?wvd zj_!6JypdbVB{RQT4Fd&7|^ah-)hRE+az#k0{8hM-PQ z!QYik3RxzfI*ZTG2N&fBF6K9ek-_;uTj)l&@evOaD_TYAr}SQa3}K}lNj0x?p7Wc1 zx>ik<@zfe&_7;UVG7EavAM}d}oFXe5cafDi#&7x;^|=KK#yvEIAt(hEQEUqYbI^4- zQ_l-M8=6*EfqUUTF0bWuILnd#n%XEx}@OS=_M7km=x6y%Q2eGdh*^WB>Px(hd>t0?RbjU7rabX^uzt+$V6PSwCu;*|j!j9D2Zpil_ zNB*Eqrn=CcdDK;t-qeuvd$eIS3Fp&zN;B!UqmZj~hpxg+To3nnZk*hCAXL{utDgsn zAT4*|T<-qTJbRf@)_>@ykljdSHd2Z7{Y%RpA<$hK3sJ8&^Wf#G6T0DGP7n{6dMEQv zO~q3YF2q=RGKu@n>~onxF-*rpwi!R|JMOnCC`HN4BU-??$cj=)sRj*}MNsWVa2Gre ziKbufJRb7#T>GZHgW_-^?SPS;6~4>`%Up*ifFA~X)pCNj&4lFQaYeTf66pO#s@OeSt66W9~9 z^=1-sSelp@LTt-!oW}Y(h}Ctmt`JVFCLN;@+RpFZ3P>9p>Pk?h$n)cH9%!vXG zntS;4KIjVN^l*VVVl->|{-qu1pc*)vY2FgUBIkg@RYA4SmFPVi-?(Rfs}``Nb=8#}6Pi66o)&$8+(TnN*+;V5I(!ex@N3N62LM zS%T$`WsNXQtU)q4Kd!INwmE86drOG?@i>{CQ0WyZhqW|&8qS2|0ZTITe@aH`0vh!j z*01bLr6zOjGlia`D|9q;l_qo&1m>j4c+7IerG2?I;@H`kM-xUzyih zhLI1o(qZ{dx`#^ahZ}s`J_Ijsd!D)5$~7i}H~8hVi{+UJ9!H(1Ok&4?LjM;>fmeT& z{>Vt(eeS(p__wp+Ax{^YhJVatIm(fqn#C$-fpfB&{*UhHX|cFl<4ENnh8~=q`Tq%F zrdZEfgkL>7Z`k4R<8nG~IKv$$QHyfevMIUI$Sd)dTLh0(wKOo#CzV*=cmm4J6@4pa z;Jdi@{5*Mk`Tcu_HewDQ@Q^p=*O(KYh`^3ewT zo!d!B=coQ#%gPjZxZEpgSRGX7+2WHO+WP~!42yP3tFB5Z# z3-T=`m9D93v>jD;W%YE05Ixjhkax{z9A59BedLGLxfS^M=Qt(Df7%jtqOBX8nD@r@{go<}eaXx9 zf|HtvU;158Bd=)4&8{aSdyi25GZ)WfU+Cn|X#kjm!>S$g_GYvyLg^4z(NAo)9^(wx zl4%eZS}m#7wQqEUxLU&*Y3Lv0{qFAQdgr(bue3gF_BQOT6PXG7`1OwpVN7T;klta& zVafq(XE-i81HOQ*xS6KlB%chIbTjU{ba;~bqo#QAaet@V>#ey9^oiMY5IhkRd9ygk zpI;_{eTjyr+;B$Dxe9ykd1J$-`u=!2xl^5s9kuO(mKKL!ex;T?Svrk>wkN&K`N>dZ z#YJ9<8C5SD&TinK>%~sLJQ@5PWG9Q_%IU>_cbl9<7oP8E?sE$~UjxLAA|!C*aTI@{ z2Yw^Y+Ue>#_A{SJYaDmy_CE0S3}5K~K(pIPS6^o~#|N0q&us6M5F9X*IoY_Z1I4>| zgi|d|A@q(z9sbue5#Ef4=kPUI*DJg~AJZA?=8QiU&Dai+;Re2{9hSm4e5;8sq4E}y z-bicUjC8WqRAaOeyw{#O%e!}b3i}@UyGA60rSaGIrn-l?Wct;1X&adl>{Wiq(X_iA zvu2?YBqRQ#G~^|7;jipVjwTJ0f@NspqnJXBG);j7d)bth|GqbKKgH4y)vzhv;%0d2 zCX@YrKsKl;4)Pq3Ws2MDI2O9anFhzy_R|L7eEYvrPIx?`lh zsn%DWXFH{Y^82sh{vT%jggZE$md3>SC%Y^?_cXA{?2$mqFzoBXxHUqn35qJvJpq(;F~ zcS?x=AD#R~#D4lb7kf*>%D?U0;FxD$sqI!z+pM;qVDhu2_U(#-SQb(A*Qj_8O()UhPFe#*7vjZ!w|1-Z~TTJbiTEmT6c z-i2;m&LWX)dw`euC~e@EV3YrZJW>Zz`ccxLjbYX6#oiF(>sqgpAoYpw_RMw^ z^*Y&p6ZJaU9p}00P4X8EtK&Q2Y35Gjy6H%wLAwvcr%lRhIj=ljN<%ZwJ8?8x{YK_R zFJQ3OKrO#$UO=aAWjM+j{_apRE;(qI?G70{6+&q<*iISoL?7ZBtl>Ssj;Uy>G!~AW zhD_3bI~>)^9&A>?piC*<69M8br-Jm zEV5+J&2!0f$-Ip=vljG6wXVaiq@8J?X%^n@r<^2Oz;{Z+-?*K8;0RcuL&ZNli+<^Z z6epL5PW~4Zn%efEBWeq9=irHE6~GuyNu8GubdCA4h``{NaS&7l)3)^qjZ)0pl)+OUV$m-k};*=C9bvtSpwCg+kWhiKT^bn={QP zaUw~Ui{x@^a;EdDMYJmR{glKErMq+p3g2xf=U)=GZ~tN z2XK$MDeBIA*13$P6FAD-ar()H@7KV@+J&>bGHu55Sr0X?$6ET6`*5Br%Y9jfE|hv` zNW;)CKcL?CgFDn-?Fn1#m7}n0qkFt(ohy&?x;=sXL<5?uhrz0TO?qUtXdylJiwVGQ zvPgb*-3|EUt$c2j@hd%QTOpvtqwWoW3NqiYlR0TdV_`ZgP8wyd&K*-3R;9eqj|#&p zZOr6q2I}=U@_L(L0c_wzo!!yUdD3+j#?w?s6pe4^XoJCv$7HrGxshzN?R_JS^NHL} zCMLtVOy}8mMY8i*g0@u#g-K%n{h3Dkv<8jd$9hn-cfuDdgTDQe9Q+|u6db<-JdY*0 z{&8eW&RV-mC79TW%q}9d4s>h!U4LmqxkuAp74-V7%nF)7w|d3QYbEM!4<<7$=)l4! zO=ov`-uQ{|MZ!?bj|TS~gPF|_;{>pP1o{>HMkQz~IfT2lJ@4P*Ob@d1`PtxnHDZo7 zLoCg{V?FepIHdzB+HR5!-J#D+a^$z)gM*O--)Ikhi0sxlh%-4!Nq;Ag^upAEz5aMk zS|`bhWrc^alU+_j_I6p>YZ-AS*kPem#9uy}DScYHQRdQ&(v*`;VP-m|%m<&n z#o1~&Z$SgA;xi>vuv_z_W25u6eX`b!GlriQoJvwxdRWqlwT12Mv->d>>d4(ah?&Sn zJkDw9;2NMW$0`4fE(NW4Gt7?wo%}d{rysP`H_*?4mKuq^{t)ff|SxuCPSlnyN^X!U569q zC8~I1l*~7}L#VWIxKA45D6Wk!s0$iGBB$A3x}rF6PSI6Am_%Dsc!Dia@WzvE*lTGn z2;w%ex3!pLAtn1$@#1Y?WuHgi+Dv%(6(GvRKnUN42dJbFPfL0g^D2CY^Kike$9Hg- znLtUp1`p|G;$tmMGF8z13H=0jBrRUZD4aR{NNwIhyYCEf&xLyV&CuWY1Nuvt`682( z5VZ4VqTPChj=>42cx%ybi`rd|jwo4o$P(OVKIGw>FTu^9o$jTF_{xtmkvf2%{wXt& zqBx*7@frW6FPENW``^2BvDt8J#P6RM$ThT*}i2?1g;t~VWSq`A7gOfD9q9S<|;*>`7wAKHV4!^^n4 z3zEq{NF&gEc|PswMlG$qwd%9IXIAmcs#(jx89L09R+SvXFJoJhsSOSHxXLV2UrKCe2;yemWX%3Md>1aB{%C?kQ#agcVQ-0A(5IYa^ z*;Qybdxutjh{n4l_~ctqRPW#|&w--8fayuNt~*_GS#c_5;NG(u*Q4USGA$rMnTF?X z1bJCIea-@O@&W1`?K3OvG#X!KS@*Da5rkTnDNwTW!7KhoPUkhJNr!$vvlxvW!F0TK zj?kBU-ja~{eMZr;W_v;(g8Du&anAwQTxRANT61E*h( z(9fti^Z3*jDAqM$e>9}sa17TW6-}o+S%Xx3u5r+p3Xmht!RevGSv4ogyba zQW{N0`;D!HHlB`|;_!m2G9{W!^Tl7BmIIgzMjPkhbexXQ^8_l2h`)JAXkjKaN0?Ex z;Cc*|NhUfCDt{c>;-YDmr;F$h4?Sf8jhd{Cehe~Iu ztK45XkH319t*+vgvq+__^~I66-9F(o=xjPh?sqK8@kp{lyIE7yGco9npY$c_{1E08 z`GN$H5Y%fk-tLmjFJ^Ezq{jt1kzRmkRJZ54W~8TEkStpO@$98(F4IDTa0%L1Yg~_w zaZ{iHLVI$i>k^Z z8eK=(N-5!x2#N(ieJ4)0Tr|9$M!_1-TyhNR$#&MzOpsr?qu0IQyAS2N=jJm*A+MxE zJ$K-8ZVY+o5KV`rn3tu7M)B#7NmK+#(Ju{S`1I$d+3>+Lv)YeFKQ1R##Ek`+olkGb z@19#KZf#Eg#WBwCrOiW3x7fE$r#*NQddUHvx4`e-57xzdzTr4@+mg&lBtF^5%p^<5 zKS4J7G3GUuxa;qP=0UrDqic-6x(Qc)I_~ZlriJDz_lSl@ZCCTA7EY;^_4&4`T=_TeRqL{W6N;Lhia!!AW6f?z-+MEE{1md@&`Nn~>s4K|k)oo2DZ!xYJN~j@yPRadIbV z5DH2%42ay8uI7z+tLu}RDr(rzzU4Xju!6eRBxqXVCVmckWD>e{UA}QKvK-}@AoOAd zIEa26&CFmIorCphMo}PrWyIYb$xgE+J;Eoj`M)gy=>+bWu&aB_aeP@JwGaOH`i6?#|6T*IY+nciHbVS3S&+qY! zZytlg`a1XAAof1_(6+LW;i|+gb2NU}7v_1EYIp!|ljB(kdFF%?qF&PStG`K&okl-- zhRdid4#Q-2u?m=TPDfw*m%U{Um=H-chnJB`%XOhTrmC0ik=g@x)8lBCTZ(S` zmectF=&)g|w%1Y3&l{@o+Ye>EP2t|F0`ciS-*5uIKs}lV%JXkk?(<$u<&Q9@31c$5 znl-kDeiw83#q`*2#1-?v)Zgs3T(Jz`T>D8ph0l1Nyg_+ltD;qL45Ljot?fTfF&}W( z7US9<#Mjsvr&Bh3?E+KE?4%0XGp9Vu`Wb^O;3M<@jeOo%CgCI5V=dy%@?U70VDHRQ zQhP;7PW^y26liS!Mt5^A^4ne6SsfAjiRJJ^{gHmjR=N&1YDXPkv^8o^R@-v8Z<@l0 zJ}nr87M7EAwU07=gYfW<{kdY;im%$Lzs%dC1KC6cZ~J4CN@rn|r@;3673$<2+zb8s z4NSlBBxq~m2Pq1rA<%mg$g3W-w8Iy89;#kHR+^SLthcLvdsztG*|l3JXRBznJH#m} z;J?`gL2>|{2(hfV)k!S&;Md>5UF;`OvxS6c8#+0nxC$Eocy#&rMLM$k*~e_I1aF3G zq-RzcM9#V%({fWec2#{jPaKCR=p`+BMLH~BQ_`w=pcY>t7rlY}mLE2JB-yp zoBLU=;2zyfj%l5-825gAR^5YSTJkYBxXRmm2Ar9WaOyiS!x^EQuiHaT)67h1Cf@RV zOo@Jzn)(P6J`H+iQIwrtf)jmfytS27LoUc%dKevVIUI4W1V;gMgVnahtT{oZ z@UFX$uYD~i=lS^RSHOI_grhktQ=1w1j{<+eD>6by@v|RhE_H`?dX28pZtP~h=}Y4a z%V_Lmyu%9jgx#zeazX)C*kNK$zWEcT2Ah>r>}UV6|Lcf!m*Vt3o*Yqbn!9~+3HY5$ znbF3OnN;z$hp^^LaED6MG&Kjh$`>ZSb4U%;U=51oT;(ClSd4sde;imT^uxD=MUt7j z2ut5+qMqUj{Tn@oKxpB zdM8ezAe_MSdzWdvQ9O(bC8v~Den`L8Yuit?x_y?z>`Fj2Zs2@oU#bnn5mFxV$^>aQ zie+WUD;8lmuI4f5MC(lDaO6zlT=k9o=UC2Gd1<}UF}F^S11=mjp*^2`glu{ZXtqC? zj$JX8#$}z4)wMBfim76L_?>%jUiMZ7*>E*#zwHg3DXy8`jqcp8GmifDTAGa%R|X{~ zS)%FW_sZexcF?sYL%AzTswKdzJx-%sIo5zDq~X?+nV5`nzmR?FIT$QnV@>01+6SVc z&U`dAR58=7vQ-yfEyfcE3Q^SzkY;nv&tRsTklcbTcQ34_OI&Mpk9_< z&L_pAPL>gOv-0h*RO4LN6FT?-lmrjGvK#S}H#Jt`Ud&F;Bp&ZE3X#IN2MVvU`kYnty>;^elE2Bvo)go39SD zCDP^lALNzca7<%xRaatS*OML37IPyMvpp!~)!>uAMYBH*6X7Ure)mX$hojt$M=c0N z)80m>)LE-{tkD;$rY&0U$73wN(9>3G1DSGs}C;!Za7cJn$~cSeIcjR ziXOQ?G<0t#Lou12%gIcGcfcYDkx$4;cwhRfv$Z{tIP9*GkSM159)z#->wNP)n){S< z5p9YE==+L=OR!FUFIAK_Si|VT$%C`LE{U>bP#ONPW>4h%6*GsUZ5a4H1a_g7&`xLZ zOK0R)T7b(ohIvHp zZ?3J*IEYu3wT5bAX0iAq9zyyNp$$8qqwq#r;?4?1H@%NCdx&~b{rD=|=$?4_#TyuSaMnA*%!#^W@f8?0R zxbRE<0cy|HF=y&a@+DA35S`cpXAvp`PY6B{{gX>>fd?L)?6ZPn}2~bzsKq0DZ zsmpinPKqFz96@1{2WKFU#6!Ml4^gW*-rf;(S3YJA-dF7neWMSI;uEfqbm%7eym;GV zBie=C@|DNaJ`u;Mo>|ow)ud*p3uc3y5u)jJYZLDM7JTD)s6V%0KUaf*aupZzBC-Ud zm|o376TJvistBs;F^i4l0WFNU?<1f?M@z|4H`$@wNA`rowQbJBI}jQ$~N0#b(Xf>{+PU2b>?I? z-$j3;u#vv6p1y7~tfkrZda!=lL*(BFk-rA{MFocLAO8Q!fTH1p@Yof~;%(9@-Aq+Y zxtSMI7Q{QCw5b&e{dxB6bs&$Vg?My>4&lR0>8^2N)bsfbWL5bLHS+=!Ba0&+e61_) zeBP_R&a5^zPok^1^PT;OmH=0AmvRG_aVMTO0~5-JwD;a5rSTZ5i)22;6P}Hg<}j1m z@%Xvhkr^7o`nm^g%0Y@|IVqYtH2UU)QR87Uo0qpsJ8NcXlhhgZjAS#x{>g>EH^KSU zRoiphJKJ}}Q{H{t+0l`c49hdy7e%7|XQ*^0I32wyRA8S|)Up@G)>X*kD$R-$NKpmI zD^F3xPB4ML%Nnn+`VZi5$cT=<9d9ddM$2%Eg}g;J(k%T*H{75#yOUCnXTGC0#(vQe z=IZCRc%OPRdq%k|&VBYFsI^s45=P1UQRqwI?S9BxejoemmCQxA@RoZDS)?G{;mN#P zdcYPdPl~kyE}H4(^m#eRI6!3rNy^(?_GBpT=D}f*oB4rbNA21D7!!c!^?A885~WC}UI63=+|& zRYx{h@lmwgKCey8PTu;iNTyG z^IzDxKZJ_?0nbksc3LCZ@1%iAlfHpBs*NMihzjSqO zW*-}mBWxnd=sMgWA9Z1{FBam+D2hIunS9+Jc!Dm{9gQtIVLQ9&d?d(@(s;9sT)}Sj zqgL8+gw~mBc)JDdF0~65%e|n(b0|7>MS8}Hz?`YWJR|`QNC^AsB$Vnp zx>9s2X2)4xoHJ_|_@bv^uarQ`zD`Ot5sfmyQruvw$lbRXck^!u7-Oupnb_u3vfB#M z9=^$5&Y8hg&GA@U$Z4jT(vqgDc{J|)Wk)jqLaVXM$6LcPF|3+ ze8te_DD-QX5Lj?VEkLI$4((A#(&YcJbQaK2tLxrJOUGxDOePthDp1^Aic4{dYmtph zad&s8u<_z<8!N8Gy|{a^LUFmjnR74eeD_=HtaZ~&-n@CAzh)+XFt0HMU4J2F_k97q zVHC{B7puuuR%x%MlKKc>t$W$&6gkPu(e*zeKHDys%CgLnHAy#|0!I7Mv>6>zK|v!v zW997xHA%I(=+_$ONKq%U-aT@-wXhV;id)3_C7m<$2;)`O+bU9>HuA*pfxs07IoiOi zUXtA0*J%9?fgdHIHhdVI0kwH^Fq>=q{$1gyLhuUz(a}uC_n->r>vg1)7lM^LfvaEy ziH;+9>u)I4?Uiu{*HpA*fV^kDTS&=nWtl*B=U-O)e0J4t`c!rkoo*w)YOwYIjd`WW zUbzWoI3L_@1PEmU+RwAWUxOpz2Ueg&D~{eV6_x8TT?Nkh%?;ULj=P}x^LK|%5&i)s z&0{TwPGJUVSF&ReX=+b!MxVv0^`0b({FbK7PgglLcSY+Hjhmnr?7&1=kq6veO}zNG z$R?fuF5U`syd~J#Xtd22z-|hVPJRq_rY-YjIPZwSq>%@1coa(0pQaP$@s`%`GB)xE z{#qkYfSppG*sGxXIf8F!70$@h!ebQ1#m(*Mwn~Hh+@|;F7qh<{BkLzvyAOOm9GrLu zczhf=*~P$$i=%UG0e0%oUNN!~7yZAoJR?}sEBZ6D(t*^}Xbfbpw6^4d5qvLRf*Z(a z%dRA zq}HFkQVW&uCXln7tjYc8Y~!{5?3JA)KAqEdrxV~h?Vat&;P_*?EgZwKyBsIcYg;|` zJDZwpn<;lkZ!`#QWH(x;EapO{ey~C&njBw~Qk_9J8z;q0b{D_4dpFo*Jva$}I=LUC z)}wK*$SPPFd^^|;SGEmatRtSHLQK~Am^RxPY-F#@G&M9kNxHi%?4qxCHW{i<$OqqI zm&u7vpn;+rg#5BLyQnJKah$ zu7)u;uO#j0z1d=cjS{@AwjQsOrnmA~_p$E`!F;jI;zD_6E|)gK5#s!!O?t zUg!~iik|%P0-V@2aI+m`jh!MJz{`nqfhmscmG5M)?0|<(06j_J>d)-e>Gj%4ck66v z75d^!c+sQG^^qoZ4brf)Ln$aZ`r-`LNak_vqT2Bs&v`uw2dG7Lo|zKRyS_xni! zDFT9b4wdl`zWgz0`fH-|9R@e>kT!%~co>6F;T$FXgejQ@%Xn3bpFvXYke#>L-Pgl_%)!V z|7l%h6llSjyzpTIP}RROZK8pt1f5$Mq?b~jS*Mjv_7k4ri+tU>Vu)s(-X*rOmJxxxpD+r5*QhG}HjAD`Jf%BYGkX!Fv<{Bl*r1 zFeVs+4YNoY+rsHRGf%%Cj+S8DYe^);&tU(VhL>zRcb!IiXFYPwZt`^-$7-*KYqci$ z*#L5UFVjGgi+yfAnwQp0lx69co37ka8#xxDuxv&G$06H#aM}dEb9YImuS!DlBf8>d z;$rG#NClzHs$Zk4ugk>OZZf+4e6SShFcG)m-rj(ZtLQ*_plW{r@7|wNZCNn9oG|av zWZDhGF?iWL2?vdt9FBd`5l)roZCbTFKJmQn2F_ddLHza}8^a(iAZ5gED9e7M;afm+ zZ(CZe>hqm%kNRQ*zCjsf`6f7`I8^1u*!>H0vTnd`ut0l?=Uo&Q?3%6s-*th;DGRf9 zag@eW=|q1FC(=PIO{$xZM2ND=WW1ssoLk*@oQ>&`+ojAR`DP$E>1N#bRvH<$fReU1 zT_)Ww$xw>yn>aAh|Jd~l^9!Vah%bRD`CpRbR?hMt(R$QDZ}gDU`~sRo`@zQyBgu0m znuCwz?NldE?*a)V2{g8@AVW5@y`kfyvyEpS6YRhCdMLa7`QVx0MC*uSg)6N5fn?8A zA>XbL6Ga&kw+7McS(cqt}|E#Q=0ve{9e9p~{4Go%{gj8BYR(Y4Pc z!St48D4wl!@i6(Vi^+sIz#LW9F`ah1!`=_%gMV~Pwl`Cw6obu#_N6xGjAWen-Pw1d zX#>ea>QphFe|K2%GjN;r;Aelq@LphYO{UlB6H5N#XfzVhchxW~GGs)B{Su|cE8Njq z%Vx9|f5`P312$h)&W|@ePMv4}<|yyF>K^Xf;3?u>?JS6{{ThD!WwiL+r|&5ij4U1X z>Jf0jy{HlPprK6Xd|U&?R|<35VAerR(1WU^qIXAIvKM7l1RC$-WXFyIHSGq57-vpL zU6wDPE-NP)t*@-t`Ko_a^!7?1cbVJ?o<1Ryy+7Q&Tp67Ifzmc7d8aeY#ml4@Vt#Qd zI9V*5cvWV)W+a|X1u1%HSdMLSyWfYwgKK=tJwEqM z=T65m`wY;8Bc$W!p&8$r;yI7B zhl4O6LFoPm2z!LAVk?pte9|JaALd&N$tTcI=2l)Rr`2Tpe#ai?MVH_y2SWZTq-)ra zh*}Z(!q$dF_)dE!(&lKVxmX}|sVX}1WLcC)S-(i}sQM?-Wx0z6&n%?gaXQ1@@PvMc zohY`~kYaV3-ZmBfW&(;5kI)o1jrhTeo2^!v4?sDEl zpDFZAm=qonnn>czDfe_&6(`bvyOZx-D-uY4SYt?7EQp_|I_}x}WE3R81$<&X_vHyI z-N>*9gw4Z3X=<@P9?N=8cycmhQjMdD6-@g;n75T1fs@-G~Mo0VDYamyVSovE&T zo@w4czLlYAq2`cz-W;B@t_jZCjvOS;6i3lKjr5a3))`VJbe=y+ebM42%T6A9e|EkX zAmRN@wfXuxP5%E0F%>a2Hcdo1`TJDp7@8pdi zfRFO0@gTk11B@MwEpaw=#!<2sFNq!%{cO~;CBUa`JcTbP`SjvKTvI7rzc5DX`?g!k z15yxtr1EcY|ACVdLvoS{-<-DOv!q3jSLUGgduGjP9geoPgt!T2V6nx6i>fg0(N19G zM``J-U^K&vCey64n(5r1z4FLWY+HF&9;pat*wvgSv>KAiLyn=K>h zKdQa3V<0^czuhyuIem3$u^iyEJASFRl#{mW_;*TK$4igJB22V8bP(^^v45M!k#BPt zeY%-lcD^AFA5|E8eOCTi$X=<+p1Yp!Y9Uy<$F!~NCV^lbCz>Oc+W40ypkIH4kEe?q zL&H&PwIh4&3ul!3yr-pix?6Rvb_}-HCP_3qXUllJE1&VstmOUfV|i?DYJOm9V@joi zB+_^m6uu;cQC)U5@p9t@h*k2z}r`j$sJk*u|us5lF83efXQW#l^>%KKTz@*Z7T zc`=i;o7LAFC2Ln@Iu0(UbG0kP-HGOp{bcHOgasSGnfeBtNCVjSES5O)WwaODNch>! zx#}5b2*37VFV~ADCEQN?P8R+dNeqZ4%XtwAb24Y&Jv@W4WaJNp5l-MVeGxajjDu{n zSXMGw-&vo-4t-Xl?A;wdV24s11KD9-+fwD1Fi{awN1pgovUX-O&ot#XFM&_Fg5eso zNr?UmcU+&VeIS)~59;+*D5}<@zPP8&f*PYUPR$?8>>EL-XL0{?@edpTArG>w#j9x- z&x=c>A=Z9ib%V&jxMy$eOl4nx$usYT%Ff?hx=BnI^5K*`Vs6SgD zH0Pw7;+^#|xv7zABYTSDALlxILr&9w|L{y~yt5kcvhUz!PpboHGmMmrp>B+$Ve1A7Zgog@dQF1n9`=-#Ampb4I;)e+ z(8b^dE`SmY$01&a3AVPT5oq}&aIz=3qnoe}-r^Eo%NsBPeq**OnPpR&?}Hvn!v-!+*s$JVcBYCR>u3p=!}U@Dr}_9_f*9@M(nUE^^-` zNa;R|ZnG)aSqLh_Y-o$EsBEjDH(dsHpm6^iQ1-PUeWV!8^;HcibV!Dyx|vQkyH20kgahGJPue3|h`tD5wjfxtzyL8wPuE3WR(ztA8NPYSRq`*?Xs;C)MMZoh@_{ z%P>jipcA15PkyZZi?Yo&SndE;Ih=Rxqy?uNzSvVnJ6X+-x%0=mzP!_0!EO8m)w`WwwkDH%98ss07dOR`1Kkn8(;92Z^sj~ovh3!B#IOOFI*H*usvYMfhZ1ASPfn2aDIs!!Frxa0%$@x*qJ|p{?2Y_c^9BAd`mufAG!>G1ez3wpdepL zPILtB&0grcGRW_x-#8bF3C-E#PLcyrn=Ar9Gw}+Aq?YuPO4^TLB@Mxdu95rDgPi8V z)!f2M8LPED1~I2l6FzDuikh@5d3atEIXScKm86J69On;1+vn-p(898-!;p*?q2XLyz;TtZ+DZ7>J9BB|k(YF}oFZ8Y0#6m&` zlH@Ld$DOIqxmIv70DFy9|lv=g|vV$*s0rdMr zQ8K?pLlqA<;WJDHr<({qe}E@x&>rD^&WC5@0Q%|9@DruM$BVM!8<9HmFMSAE!7gX8 z-{l32EsZkI9G1-h4CZgehv8_a$g$2S)J18Q0}kSW`hg7 zg?{}BP9Y;=$1gRqaxSVnYIxt?UTkrrMAT_hL+|b&D{E7L(WlON73aN6h z!De>DM=nIgorGU06V8=RJpIq8#pkiMn{u|O!oS*l+lI0WU&kX0S(XZFF7jX84k-KhNC$F|{;tT(hCa+p3Y2Ta5 zn-XY{jAy^?%jB>We&QG2z;2vww7mNVdH<%f`%U3=mB`=o0`)^Qr^{rmg)hSexUh}- z{9tJHjp?{WN-)`OrE@Bh-~9vLyytlHimLnVyU|z8RqLXB(95#bNh|ySVXGw#RAdPW zXYJtNtD(DSrT@yzP!(P=ZI-x-4XU^WPKUwmq7#1#5FV>wr5G`HrA zQQWwdq=^%({jcD|4ME87vZ_YFNmqoQ%*_s53(Y7zz6lk z6Tc4xEemS10b-1lkFKRCTM4DJy3Jm~+1I_t*@XVi1X%{&J>v5xIu~&E8boxAvT;CiM>_zGC%wT)XEL9Ar+%hybwJdu` z{#bx&)vsb-&CZv~)LdO}<}X+SOVtH@ydM7=u^UZfdY$ey&eBX%hsfohMJK{BRIIt+hVG#G zS;ssz8Dw%L?AU1#a;xDie?crP!Cxk(Yk0s;;y?6j%<__UlR(Z-Ayj|wNJhV8tbp>i zE?L6;(6{d4tDcV(lDnu)&Ty(Q*sD4wJ9D^?kkH%$e10w%T}Aq5^2zl}~t4#`Dx z0~D4Eh2rQP_A^0tq9M5p?Vy6_c_}-BJ4kur?&f~J-Dn5@GYea zjqpk4v24I8c@QP%D|+3E(kHhn(BJ7oUHBTr;vs33nF0v;5caiShMM%MWioXq5uyPq z?iP3f$MTk+p<}4AH5}A3o045EW*_7@1v9bH^KZxwuN@V4Y3FbIF%aU}DEuy2gYf3g z=cLtvuTEXk!JE^)G#QTM2I}-`cnKb|k0j!=ABvW4Jb%wIer=brHu?Xb_{A5Qg2}Lc zW9~*9ct61@9>#Z{n;w9h@=4a)ClcvvJ2$#ao&@jY(0_dz??kuVb(#rmH-7Y=YCovrUsRSt7s_YC%J2ulnx`i7JAal<*@QQcln zt$>O<9uLD$sTPcUsJIARb|dP}`=F7LuvAM-9l`8Orgz2%s5vf!l6^8N_@=w@-`oSM z7=@y&3clOi!a63Gqpb8C;6;n%v9=BAvnA5^^^DSg12(fmin2b4@3k zI}dYRQKcrn?2}dpsTYsLdg5*L(O*$97sanS4QISck7^Ri*;(Ld<3P$+u)*<#HR;q*cgR>gkw=mRa`np~rH4Xr0Jn;qya(`FeOg zpjX3KeQoTG=&7GYhOLAaQX&k|dZCK&%re)~z#^jv+7A|(z;l>P z`pGut(;ql;hB70oLVw(UF<>MOz$ZtdGPs4FtgRA_JEs&l%@}fyvU$6rp>7=(6>&S_ zRapDbOTJ>>ukJ-)ziz*4SRb6Y1#>0%$g`dwfIrt|jSqlcHyB=b+u@iSz+ zoF<<#4L?v3^I)R&U*#Ab$rdoCiM;!zX+zNPm;QtURfH|DL!a;h)+IIb1rz%rII%bO zaAzOaO?NTxZr}Wnciw8Ao33`w?0n^um1DMt@^7+r2JxLY;a9mzO7|vsfdn{+J$Pb% zfWi$15zm2Z>Nj8VbhvgW{Cs=x=|^(~N{in3qY_D7`ou}Hfi+6bV0&)+ zp}6f893!01Ttz&my!(Bbyu;lFR|0L0g;5!LZPn#g7iPfUf6|)CY8*Vk zRdDEr__F-{+_%w>-{e&B8-G|u{+fN9B-_AM;HM;GV-*QEcg)>Mv^xziSO9<6KJb#c zC~0@_>(_Dq>&oMCcpJJOI0rc*?U~hkwp-|4RC0rRiidk;7=!Sg3|CGLq?p@ zjYyWci*jxzC#eo3EVf69FrKOD0=k2e{0evUMabAt`PzAS3u?0G&qP809xZ9SR2Y2z zCkZPCcHG&HTh5;Ds-8`*JkD$OiOlg8Z58>|C)13aia&4|s9`8t>W6T=7Yt39>Biv> zyay)GL01~>Q&tkQ-)TR956QZ`VCECi(q|*tZm-^smq9TuFy=CyM^&eXpX`Vu@&Op_ zFl#%xE9Z;3v?ykGE~bGb*fpLz|AIU3Aa0H4l1D1aNQ@XMt|c^8CGEqP9KFi-E|>p;;gx^r5NgmJ*Xc# zviCQ!^~VeQ+}_LC)pf$r5pCr&TMB2I>m;p&iH%7ozd#RmtZ5gg`C+8~k3zSx zW`8?>JG7qLI8MsTcm9sdVy^yW&QB&rY`0;2`THLcfRKHM7p2 zp_vD?_A>bR0uQNI`HukI6{Z3Wl)=Blrvf_BxrULrsEU|GFKqM@-1n7M>x4&gm*D8!?vTp z^C>g*Xy(?M;Ai>qUzYLIwl^ku4QeVLK9|+(FFG$U;Z0QX%fsO&Mh8|sM2C$n5a&!B_K|DY!-Gxk* z5WL^%2u%sovT*;QK^PLn?1S5m(L3G(O0E&&OTLRa?y zE#r0+jyu4Ru7aD`nB+$?Nt@8H@6%dIx=hveLP4Kks03=WiPoc{WQblDHj8tm!SvJb z;B;HgKEm-{U9L2z<)#oQb&S|km`}#c8_tcrL9HUei8Jb_!+!loa!gh-b31ABfSQ~E zm7al~av(_ABoMUys96Ot;^{P;MWF$EsI98o4?l2{iB4zSYwQJ5`O|!e-@XqxX+C;u zTiGTnf7RNKJvd+ezgt7!sT=ET3D#Sfj^aGN>01p1p~@cEW#P^>ur1^UWc z!Vctg%p{%Mub+PgR{9G~X%$O%QcLeKId(K$;CJ5v*LRB?ULlZ`>;|t|L*hbX@|g>P z59cNKpC7-0>Z5Z=>HM*OdfZa?plqIit8?LGHeDOaEckl%7wLXl-d*EzQ%AfDLGVIH#O0*hoR>eMA%A6W zOYVI(bf1%$h*TiWaQ4 zcyQa`**GW!kh6^-+@CO0JD_0qUp)g1frn)JIG+4D zw9IY56Lsu}$?Q3sbw%~3xOx~9mtVyl8Myjx5{nmE56iD?(d;)J`Q_iysdikt4)dK! z2(v`fn7hOH4zyxDETsRJ-$~j+8k|sN-t>duqfNo3LqN#0asRge&xQYAcWD>62@?v> z>uAXL=%NG6NGQMjGJNn+mQ1K&_KM5UA)LU6-i&neiR`mkY!9t>rJM9H7=*%PE(|lB zF$SaJ-p3BVgp9VM>>wGs(4^AmlGS&W1q7>MWm6(`r8 zhMOdq?E|N~&E3do$h(tp^MdP)h6k$3(=NbUSDtIfgHoRbHLVDDb5B#4FaLLKThxc$ z;R6#5El`1-G|e|RCP(g%@I<^QU9##?yUkDsIBu$QnVIv0(B~jwrxAI9t7sLnu-hz# zmFkGkzrF4|44=ORVkQW+MsqcgPTrY!z5)Mf%iHhoLU_Y&(;kHUm!<&;FLrRHEczLA zy`7~6B#L=wFMWoU1s}?cwevM+o*t!`2vjq zv-QFH89aGEBd5Ww(;a;HH%!20(&5LGiarXQd?ihq&w~|GC{ zP4Fphg_ZH5G+Y6aQA;esSFRZN%}m-~RPrt&agA(1NxT@e<~Z-1-cpH-4Esid6Cq@!em6hqH*Sh7$ipF3mgkKgSVCrNdec2 zMn7AZGw_9t418gG@O;BS#(&~Z`WBo8w7vk0%~-V6zcrOXYv1CP*`v$JslNhQmg8_~ zJvJ>4oG-qz=1!roJRyIul~fb$kDO&4*VI{bnUzAtT@o&KC@Ar5vOb!b*5Y1h#|gf^ z{to!0h0{fQ(#cGyK5>-nBxUF0!E0$jqEo7<^?S z%}=T39dxf$q76VnX;|3SikU8}qb+*E>LeZ2W$8t7U=~wLzOva3 ziMS{BaAwXx%1t{?R)0Cq?c{nhVEw1U)okDwe?(|I)nG@~<&&?&IeK8^=C-mlsFsU;Pg?GMTenQW(yoULxqAJ&Cj;BZoI z42CK2Bb!j0{6#-KhMgx2g#0sVgL|mvQ~A9W)EzuUneC_1cMYY-Z!#+GE9gk8StgoqnhKca zkX6|a?d)K#{~y@9sJjzD$lKvzDTfxJ7=1rYIdd(7|ND+BaFXsGNb!1@@1;0Z&X88E zMFrTD420|4d2d!+94G2geA{I(oCr@R*JsBZdkNJV@DKcyTyz}`Al)gGr8b?(!KPkl zoSNei97Mjxq5q#I9%_%mdd*{n&0(6@4J+_P8v%Q=g!5E+a8w0Vlz_Un7@mc}?C)1B zqlKDidY^LVPf1U6bDrMgDCtV~*gCHOowqt{V^}K z#0Xi$OMKhnVZOVNXS83{fgwG0out>Sh3mOvn!Tx-OVQi3a+I~YG=OBjoAlM=*{ROVgnj83&}F44Y`f0joD3WQTd!BFE2BE z%s(X5zJUW=Pj=Zcnm586!<^S$ojjdLL{>brT-oq1B&hLdDhJBbNF;tEX6Jl+!IBRx zf(G;;10ISf<2gewSc)`~R+ca=_d}b|1AW~bSoV8*BZ$T#+SOuF7?(8d!GXUYePOC) zE?Guz1No>ONu+N;yVo-NXBsruyDND+gf8-BAt5)-x!ci;YWlw#evSm2W~jralu*MJ&*3t>0#SLGWdFXo{+jw*Ws~$rb9BL%_3KVBRCyM zCx3{F{t_y`Tc+M71K3Rud@LDgg-J%ox08QI3^xpEBpAiA&Yl~~fRASeA5X{s`U}20 z4;hIwV7wi2CfjS15uAH7Z-XbB3!ViW@AtSx%?uD*=G)`SWMSj?JSq`E( zxi{B$ilcb@yV4{$mQ?QTXx-&Zp9NW{~ylA&{bqIaV^r|XF$$-W7_+gh&w z-C7u4Iz=oUKns^!@`7b_Aff*(sB|+BaVLC{|9_lJ`7vasZ$`Ub0wnVd{MS*?l7sY# zeWVk*0%+MOd5dkal7JKOmP2&acdz#Nd<#OVhuOhtqr-NFgs}E&y1zJgz|ag-$0!?Z zXXQWE>UcPQiJfuqG$rX{Bv~&9%%f2fn^6ed02e<<0_j;2qkfxmq3TXRSy2wm_z(Qo zH=!S{q(rGI-;_%LzVE<2tDcKjz&$&7OVBD z4FBK2|76W@imZ08ZxNdMJg&!%tM)VMS>>ZG8ySQDlFHBzH`fGGKn@6TflEJbVrBi+Moi*r2Xi851T=c~u=!@?w zpVjyFOwK4*SNC>LLmv@i-kqTJK_DC3n6MK-7hd3H7)CyLYw@|z9lU%IcYK4ptps1S z%QT1#ZiN%UdlVkYGy`15G4m5uZ(Ve?dtsr=nx}KJtApy^AS*Jt`HI#PLKz&fvlec^tYzL4dme~JR1$9 z88^uycH<_fUn6jHc-a?AvjYs|JC{QKNo};n?_dX)Fva(hiWzXBqu38uf|=eiWWiAT*|TrD-sf z^=W--rpDX1@a<{qc6#DmuW(QdL>ExfR$OjEqvl1{*#a__hQp4}#J_Ub6id#`DwsJV z`~O^0rOFr-6hdkGSNiAVj$|>|P(HWkzq!dy*bxLnVm&-J#o#q4!H!TJ2Bn8sP z4J32L2Xg(Mlhrly)E
iP0E;x9@9!>=H!WKbM{F}z9Zln&-BUW#SD zh(O)m1aHF|INEHE|L9|=Y%51!c?%ko@8a2+X!*i@-y)m*1I_`N+!fred|f-BNcsd) z;b-N0p(kyQ?zc56nW>yQZh_uZ;?$9hy0||X3^B$dFtvwGrOAJaMc+MNh~oQu5IkWt zC*3Vdidx>0)7hQI;!9{vw=!8jpsBtSCp{JY*(Vs!G~7~IP=OUjWjvW#=PL;(L!}>JBG&0>`x_ND$NE$#gdvZA`0`4da zc>q<^B$6PGs}oRvdF6c8YEpkX20wGkT@7|S*z}qAC<}O24#P2?tqP7gjkA6@SG`OR z&T7t?b2x3zCwbx!=uKAg?K+a$`5ATfV%9)ca>v@?ZR*Y*FabyW0oW_OctuQvyX%h1 zcCQj{|A;eON8j3B>tQ-LG-4_GFW$nyZpWcK4>W5o*FJ&HArmGH#YB|ds_~+VWaO5}c1JOCgZ~2FNY6g;clLpZtBvRxBRm*}F zD-Bg`x+a^}jwY}v_|T_}G^wLmJ1D|Y9P6FF4%>|425Et7fvVZQ_ zeCh|aJaJ8L;0iv9f>@PS%ZIqLrtqt`CwHYW+K0{oRe3|6b277iE0B5}6K*p7PwSX- zSK^i5i_-hOM$(ofS8E&sP=OTt?*_Nc=jD)v7MVGf8HOypk-l~zj)RdIB z$?7AtPt$46-N;P+9j;&osq7_Df0&FDDH)myPjQInY2@0|U`-*JWaVD|W|tpITF!Prim$j@5EH`mYkq z6`$ycHj1U;K@XreY;8KodK*XM!cbP*Y~HVDpy7?RPVn1Jnn7GE9Ify7;1}T6Pf3jZ z33^u;oM{Y-upeMK!@%$&*b#oB?oJ~qSvGE<-!UD}YB|eSc$-mp(;He_fnLv2G`7oR z@$bT!7lht#JbrwiX|VALny-UoBqo!k6r|gQYBxJidlSERd6ew$P%|F^Q&~r^=Prt3n#XOVFF;=skykA`J%9nZ@65 z7UbSXujvBPUmX0cNnqF0bbocj^afa?V)Rl>z}0e#U8geN+y~+n>47yr-8_rr{_L>r zai#8uEhuarVY&c@HlA5J4mE#&*4uuxem?TS7qiB^-1iamyaQ47#-cWDNNRI;aJ4ny zm*3Hr_lL(x(^TN@zi8v&FYAy6(I4h`o3RBa(zWFBE5a2TeOE}Utm$Ns^o1j;P0mnf zVI_JSi}@e?z(L0DxJSzAFEcBD04s>W#c%-Kc6m)^%@yvuFZfvn5WIYW^pzOY?V~}i zQ(#VFS$(%iuN_DZMi~-Fa`W5Qr7dX^9`Tzbpp@jywUa)MLFkdLz?#%2t+%LDL~J5V zA<^qQC-wwzOvNND%jN|5X1_grcO|E1*LIeGBLV=YaZe5 zOM&d1&=}bZ_kwOL(h2OkMGY5F)=M~Q+Oy}}#a9p~Hjx@xx5?LRwd4X;8$OCULcHaW z`5WqjS>$h2F>ImXYz2GkMfTO4to8-yD^*gG*U@b0*B84;0MUWo8c8QFP9DWXn48zZ zxj~tBz*;nf!4z;|{ML=thcbo58vlTu*TT7b7^ikETn%M8X`HuJB^h0noFq{6gMa@< z!_`D)_-cl=d{+|SUHuGIsP+b^c|+VAH-lG^e^G-(cm-{B23kFXK+yBD0)~?P@*+4C z6mtWtVGZ&DvNG|1)Q!VWlt@Z;x^W?=jWqI-yMkyHm9mpMbeTl6NUNQz$KV9tMb44` z>bE#MttW418R;L%Xm%sXKbVh>R@U6+>U~l4=K(d=aqSFT-OAPLu>RM9V}`)rZ6uYy zDv1z5;7X~1Rlg3t>XUI6lixG*Dm0%($x#incEGn=87F#(6e`x^-jC657DFQbJ$yqu zK&?08|GyZ>pLkBHRa17h2i)OER(c7Zx5$-)Q1$zB>6@_bHu1|xz!z=R{L$3qOQ@qo zAze3^d4IE^I`=+{v+if}M!q%CByki4RZ1g|zf>UOsRd0hXP6yZnN}OWkkNdI^o{@M z8o3KDSe%Tf^>}r1YTlE%Glex?h4t=6(=PM;^8{ByV?8IZ>I(AC?bih3t=a)sHy);P zDyY_8dX)bfmyisfjV7dSw6Nrt%8=qJDkC|^*1)AVN?2jJMP^}l++rqh+sp8x7dTCP z;f<@!8+VYsrXslY6&Sjq=<2JYDlfoqUK9ks6>Qx`{4{!Y;Yp-j+1VkIwRv>QIP0v^ zmjMCz2XtpkAZP6m9?k~1hijt;E2b=jo9rs}MgOqh@{v~+UBs!wja`z|LZHAKl63g?i8%SRnj?z1s#I4-??rTV^F3M@+sWyglSV4S*O?ltP zk^^#z{&)`!I4f{e_>s)*atE46_FCsj|Iz~S1V*~0c?YN1`o@Fkx@W?ctYY2WMb}$` zo%T?`!DAzv{TR-TS={eH*4lV}^9?Ax)5!>L2upV!rm7)rFdAJvip*B}Px=uC34K5V zG(yt?-tgqzl_%r{|sCicWN~c#NI#(XxF`ooe)W~q0#DU8wE`ngH+QSRK zV8`hJVl0!4e~stAnX9hnD|0&d9{Y@sUws(3@@Gv6zQ*@SAz7!h!y1I6oTSU45YQB?`78NXjeL5C*c_nfb!*qw!@5e8ngn1#@*JbPv!y)W^S+ z0x#VY#>fk9{{cPweg3@wJ=be;aoOt z{dnp_P&qGDKcntU1UK0ZKluaHY=rqPC#y9uRf7U|Z^S=U8_awkp1@L^=^nv^&E_v? zi<7E0*nKRiZX@8!{i+0s^X)W#^(f93FJMRSqjP>{=+A^bi#FM7@HM4{Ow9BJ{3!VVM8YMaKn#!XuGC0%~~O7d4$gI^ys#=u#CgmJc*K&GP?O@@tB`svC% zROJiEo@j&yWdI3Z*EnHxCLy&9dybtc#%I{1kI}!zgBT5Fe~8uJlJm5`QS=2W{!3^< z?$LellQ+C1tmu6B3KbrG51OPQv=W(#5E&vT;J3%7-pd|i8!;G2LF>yy0( z*%RkUs69=i<5#+^`jQLpF;8Mz?*czO(2xz5v^Z?p99;~qf^&R5`tbXfqF2^N{*jHd zd~T+SW@z0v!%&5A65FOTf~;O84dep*`(+f~FK8YKp;@$tkPCe4j`Wg~g`f;m7n8U% z50$%VhbxuP#=M-AnHwl#`qFX(I! zYVne^BY#u zF*8ggivJl*)GGIViaBO3bJS?#H{NrJMBiNWj`Ts>{!4rUKY3gJW3!TW^vvmWB&*Xv ztSiaYtPQ0;pf%rV5!?q}yogNb4WKe9paur~Je@)8?=d|O;k;EAC!ee{!(TZ_or&gI zPeXt49T&xD{Uy9J^Koo-WRGc#{x%*Z=xj?xnugYk!=%pEj&eKHrw7#hj(M(gj)~}s zzuF#=18|FZs(7H^D<8?=M)(R3?_M;D?qT55chK6^2d{sH8*erDIgsDEPr#eK0k6_$ zd}48YQ(o(%(fA3bp8xbTCs1%r#-;f;R;z+Q1Vq8ZP00^m7JY(p$fA#rGtZn)JDOFZ%I@ z-A8rRg+yH^&g{FScb)*dI1P62)G`h9@P&9nT4|jFaHDa=QFwD@Z)Nv)=OjlJG9W(N z-pL=WGCXBZ@upCMuC1J?{z`(>4a8M&6h*0zWc00|WOZpWwed@2HDqB$cu3N1#k#^nbL{Ltg|%qBbAe(1ma`}}boE1N^sDTaeC0ilTwQ51O;t}S zTWp(A_I{IcGRxl+%Fypt9loF^D`2~+5x(7n{NJvGXZj^xjm@a(7l7KWggdy5s@}nW zGZ?HUv#CiS9lfhL1s?taXGjf+(eENt)4h4c9Hd!M;eOmupP>j?iLLhvSsMETLKztW*1m%9EP^GGRZSx8uutd90c^dn)*;B(S zh3yI{>AOincq}VWg0sm^7RL~BY(wP1;N(LjgR~T#^DSYdP?+yvGL5P6v~||8RKo4h z7Vp4Hd@>(6Hw+-@#wU&-qqL=Tl{NO)I$N$|vnrRAooI^_QS-m0vAGJ_CwW76hP96z z7cnyIQ%Do8J|5NHBT|jSph4#?*mWl8+_sJcq!xuP} z6XH6w)bl{;*P}z}Yo@@`O`Um2Xdn9j1T{}vhYv1X34QtWN zbJ1HWJcAj++c<&-atqI17%fm++m0V1u-s=47LMTRvi2OY6o_ z`+JAQ)zO{o$?H2BQkPYC&(p#E36^Fsy7Figcmv4e|0GqWzuU+u|0h{X8NjNuo6nKF zk{j%F2h3Pw^oY601j)g7pmAWuKQKB#R`<|EFql=>f)<3D@HQPqjkHgSv)bh!U}X1j z2}+JK&aoulRKQQsK4geDt7nqS%@f~6_R3%qEl=QJh~e75Ne;S;uKWfWB(F__QM8{i zjxZKB{v~Z?GjIABRNli4GYuQjx_qOBA>O#3Z14`SBxOkAiL$Ik+kTw%n{3i%&T&;_ z5eJV=EpBg0S9y@Tw&#a;5UDe{+^gV*UG^7B3J#*LRWnNg3qVvb)*V6fh9~AF9ejq(lE`~-jumK@E~B{W z2shA#B)?(yQ}}4Qxn=Jb?>+ZFuGfwP{5#cI>E-2)XfkfYi;YFwUCpw?>;=h*H2r6+ zMI!qweEQi?0xsjM-3esA0l0VvQWut@y~suy%p@A53mTWgkPIVNZ8%uL8eC(kbg5OL zjo}=*oxA9+zN=aty-6pp?Rny{yZ?0-b3DX3HXrv!B59Vvw5%-?zR**=Q>E_IKJ(zIm5L9ryqw(;VR0P@}ToK^?7J1p*WDake?iZaT~BIbXWEyZ1V4@s@9(t9`IM1vSJ2IJg=#efhiMxA1M73MVof z7W^QmHJSXAg`8uGqXW#$bo&`(DkE5Z3FfVtXxq&w%l`wb7|!*3p>3XK3IU((VG)Is zB>$8OWUqVxqYP17+SfQryB@nd&Ru9BTnYn=ELlrPJy6=dq~T#QojYYo0a4I^MHu$* zgfr`RbEhT1i|>+?xkkGf1alGp`yl$4EV=@ykk{+J=&HlfSkV7xGfpCd0WRB|g{R+4 zaL`=5kj$-7@*vx6zH?!YrOvXhA*k9fD$8(>%pi3p8Mj_(e)V(gXr1BSis4i&g!-;F z3E_#Tu&m51}EEL{0+CXdNd;Q={YKk7DZ)+s_^F($X=OkF3tqC zjqH^I=#MhV-(`bRTb*JToNJwFxMX9M{5C}n<<2{B=eNm(_fOIpO>K&fq&EyKH`?M`syb&e#6J>{9l&^2_>oQdSxLsB3rO%nFu~SjuT;mS-He%j7IXVcbdIgTiqZnvD;CiCtYoi5z|{_-%lw{s30PGw zJS8usWb0j7M~CB9+Gmcd9clY8%U1dfqhX{r(6b?$o1;7XjjH7aeBTq!%{JX}(9gV} zN4rtiHNXq*1tkyG7&LZL0_uXBuS1FDg`wF7PS=(bb}5mo7v z^v4=ztDyYHDeI52mBx=&)-EK!EW<&P&bPExKvQ3bw>%0*bTsexNbt)0OzU;&b9+qc z!)(y`ZlHACK(A(_uD>0uK><91^bwJ{@`yGRe$s&7Ck#(TPooES+cFsGTta3}UHi#T zy)9=|1_v0iF}8+sVQYCXyLfUtuh6Pf)HELC#0P2>tRIiIYd5?|ChZ>XE+=@+ewcx- z;FT3ocvl9Y?S$%gd+=k_o(Tvgx0DGEaXRcz-#Pp?{H{Dl0PzDQye!z5?FY%fWBEm zRc-+(ErQy1DERox;Ow|Ml2Ds=B+E5FlV%>)eLX`aR0F+H==l3Hr^3b7#z)peo&Yik(#}nXYUB8e6x_)kpzm70A8107_fI@Y;}o9?Z#(vxYu|=Csu3qrJ1cErlk>?g+M9)BOAQ|oQ$8F$QYazoZO$i(le0E z?xHz)E1XzM`rbnLGPv}sL2ptG3*dx8@$at3sojFB7X>@%Nxokm(oY)EXQzW5$uCwD z;w*`1tAk9j^d$cvRqO%hhp%Y03&BFpf)&cBIfI9!9d{cAKfvJ+eR)yv;^D0NSHU?z zGLz7?`;*!8^G%Fmw)QKW*ODTe52fusbZ~KE1@`*pd}r?|HSD{Ucv~4cJ4wBz#ipbk zC84YeHT5-~Kvg#arNIEc=j*^JKf^gRXJ7R*GlK(Oj(ps8F4le>e)oBxwZDVQ1=f5- zV9i${>!~74a1VMwjv5Dp9A#pfUPvZFLsC8CS#?3`Kva(N=r*bYR@zn^#+l}U*+w70 zY}{&vN%ykq=iweY#r`ev`Wzo^G3XHQ^1O!v*ucWA-*STX#two zHhgK@=~MO748>97&BH(EvOKW-C(Hq_>u;S&V{JilFl6;4eOhCz1JE^X#y=!jN})SA zjk=`+=>rw?N6_}Z1rsX*6S|VS4=0=bD0ut?{(@el(U0VB*-aCLiA0cbY7)j$ZH?4yjz;9d-zIxyJD%9PLN=is-l=U& zN;SxT$Y$urxndmIC;Pz26|KL!wISF40uP%68?g$WVjH}`%U}a*q93lVADU=(x)0j= zu&|}r=j))qT!MS-3#$5fOBq2+9>ncH6GLwF)lD30)jEo5`_0VwlU}C^0bcBbsg!8~ zNMQwV((Gs+YI67U@nvPjRWKP9c`o+6bol2xeCgic-SKeW17U8S@{Q}qip#+X=bLT- z-?*uP{*mFPyeJ^opvJ32@0ADxT-w${xvy>_rFetVnRQnTb!~IHns;%U&0`*FI!7Ar zRQ9`n^j}ad=hEGP9V&;e`wSW_6yU{+_XXUF%`XQA$vAwC%b{vojIJQ7fI_$>`W(rqAxp+Wa`S? zEoK^g ztoNR%u8yPiEhPLPUF?{&9T&?}T9RkkXF4C^*^5*@;!sV)`|g968v`?@(35?fZ~T1J z4-3dK+{f&oC;4V1{FIBg?k)J@KO7wH=p_Ta%a{En;PO!Q1G%N0SZR#CQR8 z?hbi|{%rD&sES@QNz5imswJziB0Bz9yi()1>uWSF#jv+O)s~- z>on6;w5aD?gT6&JlGr@nu634hk9G!;In))URcTnsI?^z4J2**2PIvEcp`RvsCW$ls zbQ%tC<}woR3|tyhGd>UDIh#&8ptOr+by=9aU;blihnz`aPs>EC!|D%sh7) zmc#=~G!LFAFX!xZlyxcS+Mdwt<7B2E$X)*+No^@-nZ7h)w;(~W9pANS;3qePsbVbZ zvTUg8ok|`~lRF$4Tw~n%ef2zNT=kuw>_^CxjJNfXCs{X2chMIP1G}hTS&ye<9SY{7 zbjJNPtOKKV;#S_tX>}lfMPvTcojYDZzgtEo{BeeB`0}SQJ9i@uB$nohPE5}`Xd|~v z&&iM6C~vbJCbd^}barla)%2J`eBPCAmutUcv^|<+cn3*m^+Cyxh-Mrmmn@|$+d-*M zqhft)oX!e-XV?H!QH7b>X!xXm!#C`gUV=Gj#mr;rqi!1irxtC<&Zz#zMhw^F?e}2_6N!x+Z9l92e{En7^+sN`b%3* zgU~(!v-0r<__NW2jMqWK7qG4eqvD$aN_`Y;JOt!;87r-_X_+Y-{he>gBluz&CPbhv zA45-W1e(5J#jBR2QE!h^3ug7z`zSPPNIUOMlHntrukD-F1oXUX@ib`3T3aIO#C|Z- zoyZIxK@P-WQ#%^w{B45qB=8hOm7~yzl$-S8e@Mwa2v$;r#OB+k!sf*&x<=uRoC9im z3T1n7QfKa>Y(JsA!Nrl=IU2mKj`x@EQ&`5(uD;uzu5PF6hGP;OMQ>7E$IHjS3!~9= zE3mT~VFr5cJ>aqi(lrN|YS6y*$#?_Z<`J%$jE*Q1Xk}xN)2p1`;$gqYZy-l)CCM*m zNW3XRTI*hX6bne5IS41=boFvS@|2^JVM0U;`ZL|W9iH;wm8%{7@h^4?JSuthM5jqP7fu4hrtK9=W_;`T{B2137v^pSn6F=lTK-$sA7@HY{kBAnq1 z{6^m{&k%Ptmz%^H7wISMdGkKVb>u@*IUE&Dx%Y9Rf-a*o9Pup_+Fj@k%>`ek<4v%0 z7O75t_jb7bGB5>~$R3DCJvs(w;tbNE_sH!PLA|f;K0T zmZ~7;BSFUA^2T*1ODv1fo3@XtWS>-o6{(AQdYW8H2~n@B8|)il!X7!_kdHmyo8lW7 zb~x;=Z?ISO9HKF{o}(Q8wKnP~SP6v$k_WcNtoXIWyR@|aLAhTJg)dHD_`%n(UK`D` zNuHX5o_!}C+;o;gsDF3STHDNe#F`z=y-A!23m4DilER)|LNSsKf1JLRKMsqlDm}$d zyfge){olRgJYM%{=L|<2j9@EH*T>13>c(4EkaThntXwu>7mP%jWjJimT`=G-q&&&6 zJc+LI&d1trnn%_uyU9@1(7tRH1+lAej-G`bc(x9jtC+8&N)KnUnrMu{ zDgT5%@B~gXvvKOhlNf#tj6Nqk!DizZFuHA==%&LEPPI63+LVO_9!y5_U9vOl%lT1z z6_+i}F%$bF1VyTy(wnqs$tVC04WpNBu(PuJ9A{93zVpVp$M-i6ZfopBkzQP0_a z8JdzBpyZKs&v*>k(4obWjQtPl<$SmrPoplH1wuUUw1Ov%m8 zGhF-bsPEjawS|3jz{r#WKUjoEGD_%6Ub5RV-29%Lp9f4bR%4=}1k<}8*imRhj12hkK3u!Tssq+{}7 zutK9Y#Bqm&rB7-yeX&RJ4(LIxhI5iK!%HNY-S9C+(=;3+2brSGhBI&y<oZu$dW5>IGqX)*{?=3U=Wc?ZIACf9PrJd=ie31uFhy*{x=REL-Sp+@M9Aux zWUs15D`q*jR2gURdYp;btZ}?=Zu2NmtL`vwb5WMwqF1h>KAk=pop=K@#X1rx?t{>! zf>iwobuh#C0JFJ=Bfl37mL6t}r|=X18T*)Qtp6=73K;cpp(5Sk4{V2|eezZ1zFJ#L zg@F{+N2J$%w3%$hK+HD7x#nbgy^VT*AD-aD=$n3`uBy-bb%tx#Lf85hCF3sCjmyDK z646;cpuw~-n8Frxya8q5WA6TDLsq8A{Om-7z^E^Q+mscuh*!mx@PfVNvA77W+C0rd z21a5qm;E}sN+It1Zp(MhtQ$D7k2n5eBF>4TcK~?dLztK*a1yUj%&$OC89*zYC?=Al|)xWCAQSl`=mhgQGE>Pv_wWy4i}sO2#OiNNR4QU8QAZ zxZI!Q#*N|)*r+;qHqPTmAIjU_)OeGrIRi<}HNZ@E>3V_GehxhbI@h0+?rLD)-@Sr+aA`@C$J)U;RY7M4Onz3pk)KNW@(VZXb{W7v>J8= zzdRWFf%ej&a7K0}`t$lcB)vv6O;X*Ufm-_r-H_0yn1-SrAP#%6_5e$)p zcViX&U{z3sEU4i=8HR!+?7}r-LH9HYx0pf($ZoQl6Xbstzg^JA(~(?KE+AE9YMcpP zl+Id~tKT*ifQgfhvvI2&V-+#r9q30U{d3;1VWjNj3#O9?`a6y2=SzVb&w-&bqx4*c zmbfzdzd!n(!JKLnxuT8C2DBjqt)<9BxGQcZXKt0eLy`FH6Jccn?t#j-u1rj4$ls_4 zQuu^i{il#q5K$6i!q#aLml1$?ID1d!NhcH3wdyXPn<2ahk}4 zj=Byj{6YTRg~-J|#~U_?%#|9b=&QmEbfLvIfnRRW)gT$;wk{fd=^cGp(4BmoG#Y>t z&jBa?MOSk#P?SuZv93uE^@olcl*i(PSh2!a(v$ z9(LCLu-uP$qgs$W^96){4Vf!(|G(DFWUaXY8(9QKDoK}4UlS}XBly{U_SwfM$bIG{ zkd$bqzL`SfAQSvm%AzP_ihk1Ck$Lk2huRkq>at=t*7-LmnHQiUk3mIV(s-1e{TEKa zhU~3pN&IN6i_-nzmmUNmUjstE6NLN`Ef_`k)>ols&Ph`CHPVKb(g8A^e7!{cBJa%0 z(IDvXh)p8lEWeapF0C|Vva9CUXm6($R-$13V`y+(hwD2#=?_;)qn(6~I?ni;lWShO z6Q{Aa|0Y3fD*I_JxY(~Cs`KBM>ngR!nYmc~V_(h`aS)|TS9vI>*#xHY9Iyks;h?*N&QxKS`wNXpKt+Cv zr&&V(1B845CyE&MvasP)+zK~)J2K$ip-l0pw!dBla`taqsQtEA9jTu zwj?^kN4EW}bQj?!8U#=~vX<^Lv!12fDTF47ezahOSlg0&;Kje7H%$T`+>S3XBe^?q zT;HHinkm9HHNfL83Q!}xpl!TyUp@tNdX1-j8c7@EO?#^OvJVfK^K-4W$cGUxi* zwj4~=3ckqNbghkaUe~6QB^b%Mt~9ALBT*7&p(A@YxeEhH9%&KGF%0Fquf=KhAV_or zc*$?{pdW(=*~E^%8!je|%$a;B59Xm~_OZg=B!wi<;F(Ce*DZQqjA%>S;L5zf$!fCH zL+(ifMv^_3!{BP^$gCZuD|w;33`JWS{C{f@BGKB-asy8A2>ifBV>=Qz*7Eyh!%cc+ zy6dZ=fRH%pd?)oK3p-F=?)We~kvw!hH{=a$~L@WS+7l!p%o*nHLyz1=`$F2(hRajQrT<8RFFl2dJ2NYCTV{zD=q+X$KN?%(2XBn#p&hHtOtN1t!hsg&m#1)^ z-it#iM9U9Wd)e)FCDEQ4#_2Adl7XzLwkU31lgzvcR&WMSe*!B0wd^^!@FEuh8&1OS z8Ve>K#u-~@Fz_|x^Kc)ppij);YZGuSxOjN``9{ zr52gZOSH3&Dz52x@0&ZnYlrPy)p%u|yi0l(%sn{=VlkVp>@k*~puQ0>1Wn20-cA;H z0hH{Q4BK%NjAR#!<8N8U1bG`Dcxle?7mOaJ=rn%!VG>jiS}LOV>?Y`FbnL|2{+raB z6y+{odTGaC=NEL;W8F5_c1M@s{9XVZ^#ExTIb+quwRrDGqkd0IgBX$)-4- zL1t7qJB*9DUO>e?nSE?8IpsD}B@p9lWY~=%xwaupRACUT;ohio%#p`Fn5*QLd;1y`MF-hrN4Ae~`3c@ve<7MoD@e#d$Hi)&Yw-bq{K zNlFW~3XQRS9Meb~@O#F1^ZTt4rm*p3lkaeMbCqx!9dGOw_=zeYw6~<<(gqOn8Da!a zpftUa(^vyOfC!G_Z-};tmfzrW-#M|_@OQ+LIkVI9l|-u3%wNfN?_j4t?z21Soa$yT1$A;hV$NECNtKF^X1rWe#^OH6<8XbKEnO7fe z{m|8pBwunj=&-<3py3>@<`1g9t7PJyg5iA*LYbY!ld-U^HdNia(Q^$FUokWNfO{+> zKbKe2G1JOU>bs*EIY-OfA3TkH$^MDqQPG8?W})LA;Fo-dJp1MbiwSpz;W=n5dE>B46b=_|!C9=A-Fw zTSr!BI`tIEFN3rmjy}$*t_|*t-n_nvekpuO#M`K&QKutf!V~;?eOJ(NS9A$Z6KaI4 z_9pNXSL9-#DHcwA5_t#(@$rnLzx6vP)O7p=jlgY7@GQ!a7v76>l`A9zH$p-AgM5SI z=;pVQuy78x+fM4u47I<#rPhoVy=mlwXYtnao$;3nzZWqr@}KbNu*E*N_p*DUt2+7M zS!q3@}1le4emP;eSQM@zziEik=g$vCbGr zMXe;c=>19LPcPSzPTTU@){4>K<0bJ=4B&a6hxe&N#?UX)XfLs%oi(SzLm5ab?*lse zoVRX)^)rm~O`$GxLnj&-=F;l)ft-W+{QmyhV)|1*xQcj|dDHo)gcT3(&<~xbPaIp)E?rLMig8Ym<01gEucD`S6?7H6)AO!!=PCggn%@(C-Ut>wD*!;m%0| z%YJRSeVV#cxh(5wpxGSMuiwKnag7Y0XW-*57|H&$C4Xir-AKaA2zoQ)=weuI+Cw(D zoxf-)j^7#}gf6~23r+&RxRJD{|2WT7lm+EJ{iToWUo?-inJdx#!!y>G+dt47>Y3{* zg1YmO{j7Rh`N@~oRyt_2*?Pdm)ka@hhD7!%mJ~8a+~$jLybbV+W&}C?Ur%!ydyB&P zb0BNqFH-~bWEPmi&z4@+uh!8x;#T6vyNAl9otzauP$6F^FK^#L`Vf|T%lPJc3c8b> z{TwymW4z=^HlnZf0(s3N(as0lS~=liqd4XKWqxRyXexzY>;&hg0i3q#;~9-X``C*q zJqcDc9IsHor8M09!rYcVh%V?%Mv`{5Ppk_^b4VHiLf@LSfo?qgXU^j8qr81PVZeVo z_G$}Z0ehkSI3oSFm84ZLaKhL@y3Ks_A9FZiY=;H-4hr3i3B!T{>K@tTr$}76f&(%W zPO0Xg^^d^F#-k~VHD5MYCvU4A{Mo}UOHM$^`wu#1tFw*kiF>N&ookk} z0J@Ve>OB&TLgd1%?+3~C=>ck3z`D|6M)f3^7qOG2pp-9W{6?0<0!|iPLFJlp%4uup z!%1T=&RYj_-wvam9q=wQ^Fk)>U%H95ogCzoTUDLCkk*rQAH}`HU5HG# zDJXubsO3>x#o-NoE#?;|fsmKxo=YGJCZ-yNb4_zpmWMgZG{O;QF?>f+^o)N#Fu6pa zpze##7q~-Uq;is5-ry>Qn43+SRbX^ z$%6KDJkKE#@7NP#EAlHFn?KTE>E?`4R|paJik;EBWWXQyfW+F|T203>XD{3u^R#C6 z0%{)clWMrLP6gW(*N}iv)3O`I%?g?%x1h|w&v~{q^WAG(Iyun+mc5!QiURUxN46T0I2%TYvYH!%r74T4^`f@*H{!)Yjdrivp&?B29`KaL zsBM!_QJ2z>#zl}1HEVhpqRjYGbC7P-19mQjl#%M9!~}g<+Am*6byHpobF9K2R1*#` z2H(I`W;i|FV$)$f^O>iyuJvYmnM9A%F|_kx`di?ztx?xyBDePfIR^(xJUI)7@C}T- zDl`0kRQxeKpLhCZ^lSw*ZdKU<#-VY$On+#3QXNl&Q4f}eptV}8eqhzgZupE6?J&=^#vv?Tl z13TIdj?tWKb`@?+ruV7RTc!)Ac-V|A0V~Y3{rX?++vX2PnwGR@CJQ$ zRjlLr+T7;eU=|f&qso)6GZdus6mL~--nMN)lsG>KsR%-B04vRouC^QLoMP*r< zz2}GiZ!%W8(MYm^tN$|ZgcWn)+B_rmc&# zBy&5^l2XRKta2&fq?-N+tV~w&p*O;d)ClV5O~I5E3;2BCw@>H2%f!mJ0A{ib9M*4r z4_eRq1+QKm{AQ=66aN1P!arQSmo!?QuG~^fX=lJJM$n}+2dwZ0(@6|jBWF3Q_C?KD znf<&n+-pF+fA0U)`@7LDH|E!dldxjr*}J$8m3i)q!RH0Oiq)ixRb@BQ<52%@7|xk* zJM2IR6F^^UE+LJs>Io!OPbKB#5j~P0)T8vFPen_61ok;n=!h3E(40Ea^c?lvWmee_ zu&;T+2xqafr`Me%0lq5=?!w^Xk^GaFMEn-~MTxxg5wN2>c;{R2&MWxwb>NlJc&6LY z2=FiLKxyHla9mu(PO}DYa0pElcKZXoI=iI(u>NN8FA}W|p|WTUAD6{6(D;@e!+=|+ zD&PAC-e`@4o6W3o9bp8@z=)J3)2Jo<*kZ8apSU(gp{{k}rn(Grw+`%VEm?l|*=cfv zC(LBd5lDU5LpJ+y`H>P~->X%(yJ^z9!&+yy6~ZaBjX6EqGQxZgJxM${D}i*OGy1>T z-2!V}G1mAitT$6g_~{5Y)e+ag7{0dT(ARwJ&G_Elknl1Sw^Rd=yUL(QUC<${=Zt3n zuMDJ|=xP1BFa0N*$s%+Kg|R>6f1hYOv-9(R2slS{buL`Za5B)>@M2ic`<{t#WQ?LV{Kie z7`cfuT3w5dyMSvs-fPkR2%P3W={0(nrZ}~3(N#79C0R3kk(JQ+G&KIl6j1~R!6w$d zYNTr!I9omemw&>ZlAf%SVt6yBlcZ#0zS$0XITC+XUo^#I;NJJ3x_XN@ur%p14@hs@ zPrA$>I(Ozd{&nSc-qc2bl+>WPwY4;sZ0@fpUY3E-)j)wz(7YaeG!bm{IXG}RLkL{_ zV!r1ltN=xDa+E+vULU=~WH|Rn`bb)zb{GuIdJj2KUSOWMk0;k*-D0iDI~*d23>C1fh96mu#_1m>)?fIp+MwV5 z0sD~z&pV&<)?9Y8Ele1%*v~6*=0A@=Xb_3nweiJO2H9u~rZSP;WjB8KXc}+MN~ckr z+*d_rne|S^Gn8!F6R;!QaLu%4j{C=U6D{FDR8|F<K3p%|Y^>$Ub z>0huAseD)0Q5JpVN#|waS%S_kl8nfEq?YYvWnV{9aiX;v@A?F>5I&hbC@cq|U|(uK zADrL+b23|9k)f@$*OtlFnD)@T{Qhj#jh3=>cMjnVyaLk{ z%U57B{pNa4QPh0q%&yUs(vK6=N0Nl*!F#rV5h;$&BA{(-2XeQLue_L?NqMb&Q_WgV zM`v`kcFzRwjId+Aiueb*yYe~T(P?*>_Q-p(03*JVq>+Z=K@jqN*5biFy-*PP7CeJj zc%N3l1Pn&Y*azflmMMXAYX(K#`x&(R&h2^969rpD5cZNk%zM-iHS_iQI*B z&T_7J_fyYM-{SD|{+hlAp1x?v?>bg!b5Iel12YRnL%xWn_SWJRp#l3|d+X1D0|O<_ z0l0@ooIWCX7lDI0{pK`RB`JLc-)0Ae-N+8!QAXdpuT6O_p5Js*tUp55#eF+ zz7pQM?wPJ3&X$gPC;)q+^!*~2mDfs z>Ym?x@6D`JtQV|Sp*gwGZgB*hL0eoD10}1xRc=UQ^B=t67vRS}JEPro=+O1~6T{Mn zhx%7~E7Q)gg%;&*G~Ny2U3`F^e~Od=eaJg;2%6Uw?8Rx;nIQBTV6CRZTU7+*a^r3g z;82UgpY&nHxd&?1mb;OKyKpg>l^*1iT@-)V=Ba1?g-a2<4$dg4p( z&*uHt-NmIje`;5G-Zzx*!=uC+UT?nuxPPu(YM+HUi}Oi?uIbLk}^;HXHOVO^J6$-HebBsOLL!5gbiG%2QeL6d|Alft7w)-%WLu@7;T}YuS3We|CVJ>H z^55aipskstj-x`TMYh;)8rCk*QgN6Rf-^M1yhh`h!*&ZdO>MOOIZ39ktBrH)cNTSD zbz5EQ9SyZ;y9}b_CGBPweZfVJ!zHqQMSf_TV6tKHJCe4i50Q{=v{yp?*lKs3H;7Lr|>fJ#YU5?c12U2LtWY2 zJ)Ks^KlX`an@y2d@}_I3tCPT0##_Hwx-eyS<-9wN6W0l}>(S(@?FPkd#knsp33pC| z9ffxhR0{pTm2Z$K7t6iLM1n*rJO3$K>aUYj8zL+xedZA^(Z*6ZUdc~r&dS4D-FGf= zorWRGi5f$vSW*791lRb)y0Y1-;8lGO2m6e6Yzydd9g;W>f{|1=xN&Qzl4`db{CXFd z*#-RzaO*;xegepOQIabIdWh>x(+^3X`Hj-B7;oQTyi93Kl{0B~98O2ae_B)LcbWj6 z+qd(}7sv_HF}TngoU`w+%5Q;n9cTVVmYL18npB&&=z5wnX}#gP%bD~4X5wj%zPlqQ z@9AV;+|`?L63*Zpl!xp8LSOsAG@N;QIa#%*$Z(8?x0qvHcP*u8mq( z*l3iWaz&{%X^PKTu}847{6z|f51*=P+D0q-6aKx`(43wk?WGUr{2X8$p(K=NCehGO zK1M9a`A(*~0(4$oActTX-@tT}m4<{8AlKc{7oWq^lnY(LQJ(!u<)Zq|Uf1!Aj{3Li zVK~8q(mi^wDu@&CDf-B3e#BmW2*1W&?)e)OSY_ZSc93Kl!_~fnm;Z}Db_bKrK~T$A znq2kPcW#%|pG>9kK>wTuQ!xx|^XmMse0{-yj=@!F?oCdW{F5mfD= zr1loHH6yw984S@#RDZ>2)pUcPh8g#fUYOpHNU}&iyunA9t$U!iEr!NAjHxycICd;Z zdIB7R2T%GM_?zm6ZM^^U@yc%E#GS@WpAW8nrtp`T#de7|Z!?*(7u87Z25y3<${GBr z57G1IMfre0nx0vf5GCerax(;EM`h>=7LQwZ6;LU%95C0i?u{!>WY9ROP zaE9mPZ9K@-(GN#{L(bi8;0;$WYrM0p!LMrJ&6{b9lX}v_G)8?vN6UX|B4_(i_!EzF z-y?;dr0t}$G+|Zsm==?qxQ?uy=S)(S$N)J^uUSo<7f*T$>dHhgwQb~qT;Ol8&_DJ! z+{HV1gVAL3m*o3*^X^5#8g^i^PDFcV=HAcY+)~Thf0u)ox`o0--_pqe80Tt1zt+8 za5how1WtB_;;ec@&AGtQCRuBsvVANjz!k>JJ6Ui4V_(gxq?0pBUa|;!(J%NI{<|{{ z5}#=@Jp_{sE|h+)^%fFu2B0whz;m7qZdZXmQ4cC#S7=ty`zG9rjcB{wU@M!+ajnO! zZDif~V;F?y+S1UpR+;N-yvelmf$>M{b>+cWxK! zYaF}T5c+cy$qN1%yzddZ|G3IP?s!4)YAd+0k)-NuLHu-S=tXezI-s{NbbsNU|EcfB z{MiS-Xf4?BA9G?5xqcudfZlfCt?v(hdc8DAXD#q2nadp)e_}Uj*uc7W~Y~BWf7iav)8?Q5L zz)$cKZmt90+C$XM1Ho={ll-FR+Ua2p{K2bF2hj^$eKzl136PF2`VRQEJK~yNf}`QR zc?+jan{XXer8THZQ@NLNOub?+uWCvb`3KBs0TjORIFViCEFEHZ8H2uVsKILZ2QD^) zekYtkcHJ{{?W1_kB|xr4u55y_$N_WHgYV!XSs1lJ`CgI8zXGJAJE(nk?)*wqb@F2q zXd&^FvzEYbZz6Rg_vSb`(QVZniYn_Qe=sL{Gb>$QOCQcrIZd;{Po{E)IEtp_xwYE}BE{MLkoj40kzd4wF^3GJjv=v?ZdKimTw46DE+Uok` zV?X3N~1DhudH*t{7_?&(c`^HP}ax0nVa7$Zh&y zI{G9Mk6QDaTW}vnpfo=e`i2~kX0$FoVy&HkkERMLg`&no#)h2s=bQgR7q%AvoL77& zCfg23=U_;E_M!Af?|~;9Bh5zFo{GjWmS(}1C_k2PavltJIT5|VarU=pTr}}?G2}qm zewnAg9EM~9nNJJQm7fH;cEgp7g(0@UUMIj$_a)=4GYXN3oUzZKaE>IadAv}Ce7PsK zXVM#4P&)=XjOo<8z#ezq_FOcGRbYm%kX|_0oQel@k1;>|Xj2fg)x3G4{sKIBOPW7I z=|s537j}eI_YxZKKV*~Fg&*9Do1h$+{S$o!P_+nFI5JA^^>Ub*p2 z=2YsV2y;6Ikf3N%zDiayvdiO`JA=NoCDVgy9!xfTFTT2&oL{fvDk#sJf12IB6MT4t z&dNRbiE~QFzEcEld=h7!m%3csr4u9_4I<;JHRp?traz`t-1mpHxt4>Y+a=DxH`q-6 zTbaw*YACIe)6_O7OdCjjaPb@?^`Ve#YyfeZ}n(a zp4udom*nrL#+3))Y&ym6nhpN?AALqnpUH-7oUQZYBB_lkX&lKf_pOt0@T7+q-v@q6 zo1EH4OLJr+-E5n(0#Cs{^rZ%|7GA|CWCX{fK$$?R(+Hf339zJD4Exw^{^I^W;T*LV zZTSe^@S(8rOSt2Ab(zS0>%`vrR$mp}Z3gbzYr2y&kW*cfDStSbnwN!{sDTPe0$RAj zYAje@6XzoG{KC|4vL0qUlC#xX6bVJF@s>ZF))K|YH{LBp!+D0srQD)n}5OVFY?SklBk#+Tw#z9g%)iGELEI5Oj)a5 zwpVtfIKv#*?Xx*o_L6%^lfbS22<6C8{9$QoK_g7VQz5v*W~4H&;q6mUmaj*1(H#9r zHaJs}b9ERgP&GJDEzlp=hrsDg<6W;}{0A&^Id0t~=E+x<5v+0-QGS-SIi-)%UHKKM z>A?6v0iE0H(q%uskR`ke!OtWy$Y(NK-ic>Wo4B2Me2;7R*ln!Lt zUC_$2R90~Q2Ts&gZOfX|Mw*QC-zv7Ck0R1K6HV(F@~LNY{iA5T9L9f{;R5=j46r9x z(3U50f;@%F{3{;8s_aPnP$ASdZZVpeB;U|A^T|BIqFNL1?mQEgiB)Vi6tDNtSHGd> zs4HmRK6k2fI1|Nh^__B)`8h`pAOFrJ18%4}M!xZj8 zbwfUbpA(-8U3pp7!{N+XHw`}Ckt7_tgV6!RGDozd^>7%N{U)J4K8l^BVYHT;DQ(oz zv=_f|jBxew%yE?rCV0-li$9c3hQqcj>^EECX$P?5bfPjPZH6TqyiIGcq9l?}ikoz%+h8Rd zK+9+0QD07<(s}Uftfbkl<&IZC^%zPA=Pi(n>-eSK3$w&XIHL7*xz-DQ=dHBmj_=Mo z?sJ|ne?{*8Bq3Ol{ExAiHCQ!NsVQ%BB};^gjShW z(TlD^p5tCqSY9$HO1jgWI~={WdiIv;-zdBH)1ufM)V3hcKNl;1BkKzgvy!wRZ33hI zA7XZ$q?d!}%g^AH`NPBz3%YZ`>;SVniBoD0iK#>AxSRlHaN5>WDlVr(YkEYzV1Gq_ zZ*$jfx8#lY6%H@w-|4O3x#XG(PFj=}>C)(t1~5-c(%-mRnvs3ejVCah+43<+KqK(U zG}w^EWG{3zx8t84;B;%*Lx1B^>W*6{Bi*0Jtc8SS?By%P+)RzbKn&i~4j)fC_$JV@ zkIs_rl^&~ai@$M1>9CEy>L7-3q|-Yc>F8N=sYOWUJ}UX8>0lXS`TkdfrQ89pENOj* zreiGn^%9)^%;@|xlWQAAmhs=H?k~fAH?Xd={^m_Pi$m=oU-&KCNGV#rDaR|*)b5-n zmOD;6AG!*9HhA^^8(}vhw}k)jPe56oNSk9e)UFOK(w?2)CC!+VFN_wVtx^!VL>oEe=VX#1<7JKdqk$^=mI zsU#$<1wni$P6xNuiPweoJN2?eT6p7G1ocAbrNlFq;Im{7``GRHL5Ias++=c`M1MaM7p0kkCBG)(EeG?jaz&- zYTsGB|0``#;D@zg?pC2Uwv$bf$Xhjnw2=<*D80aBH=}AZ2sO|YKLi_FL{4XK+hbcd z>4!82cIqX{=AoqUw{moK&LW-slc$1jzrRTM`-p6j)xtOUJ-&F-q6@peIa0aychx~U z`Fi=A)Llv?gCq@C!#DoT#f7IRw_BpTeaDWy&9aI#>ZSbeadPOLbf!$>`;H)e zM82~`5+l!(s^w9xDl2g#57EXrmO0OI=bL#Gd{Wria517-*d|{A{0wofvfze#SZY5! z@m%?pRDq;yABj@|WqEn9q~X>mxRQmI)=arZa>7&TT1Y|DmVx)KA*lT+o_{-%KU~68 zPR{+|iH7my6Qq{(=w1o-sLdsN<&HChyOw90H;ey7SXg*<|6Xqc&t2DQXAe~ErRX*6 zg+AenRE1});^g`+ppoW_%SM{)C`%r$x(7r)mQ!y&6p_(nFEyYgU>(Sy)6yQ+My5gd z1ul})LT&cc?lz0GOX?uINQb`|%*WO{^SXMw?|5?iF8XtaHHIbY;WoK$J634}X%<|l z?Bh+VFD>M2`x_TQ10jWu+%&RfA}tr-35%LD1(TlUqGTRMLir3b7f!(r=7T5LP4+=s zo=P!#gd<2iDo#3iCsKO1F|$@x*lbBB&+CW#g%`;zn|2&lCi`eG^%JNfm2d4u! z?7%(O!;oGjV{JEB$^pLU`|Ndrbn>~dpt+cEzrs)61Q&WmI(alJ?^K#j6n29Hv~|zn z8H@s_StewsJGKY+{{oKWZm4Tp*?Vh~9G6Ka?@jG$qVJlgw)=r|yrU(V@VV6DsLevF9x_o-w9}yB-BPorfJU z6Wy{OEJIP&uMx_KFTe{bz)_~iyOo2W^EWj+>EwIewY{lc13P?v=jC8~=^WC@uhBga zV_O3YRg>TCx6Wa0oeeL$gLJhJ({AH%a8oDeya#A}&fo{VWB7u$uN++QHuUw?nbtGm zICy6607^C%gfvNL4_0%CHLnWpDFtpOpVkgNfZ4smQ^4Dabn+3TQMkaV1tpu@jP>;l zzMcL!Hwsyo(bqm59&{O)={=l)W!crQ8dj4n*&S7RQ`FX-VC7eX*#Bl~8%iEcB*|Z& z=y6Lk_pyXpm!r6PD$F2b%pe^`|1wTlsK$fNo1C3VJ?ib*M_2nNZ3Foy-;4-O?Zhn_2N(66 zbn>Ziv1KhA$q-wFe_M~`yyk5Fw3$>LY zo%|A>l`ec?1@TJeL3`4%6>c6@6_K&%O|?>H8g3UFT?xU56H-gc?O&a&@UciqD7e zBJHf(P`|Z9g;N?%q;U|RF9#>FhYXThOb{9MuV@Xtj$8H_Zfq}qOJAm_m-<2=7B@)_ zO+;;%U@C9EX&wbTa1Yg2Th19TP@?Q13*dzM)n1P8u9<7Kqck~356}RmNFQKjYLVl3 z!kWcen+{K-xrgbIu_u$nLKLT8!9)J$*JeWJyoc#+GT8WZaGLEP^xtu#w*akqg0gxd z{79_vy0IC$`r(|j?pp9237Odc=7SK&!bXJt9MuPe-s`Sj1h;Cu3m&8Y4I4W0*3bzef)odu4d4bLEzmaU$k z2VUISUkw9|q40R6`0`f4i{%tv2+87XIPs3?%2%rA?KK@=(DbV`=I)etqds^fBD-<3p%ioTFrN4g-4xnGO>{YKB#WXKm{lyjem(gAYr&DyA8_JMJJ$4b1>o%RQ0jUHs>t!$feJVU-pIVf^BBtlR@W?eK|714&z-QbH z-I$szrXkF%-EreD0WJ6s{5OWXei|&k6Z+~rpwv$A%G@B-9Z`KALDyaa9OV+ZJLB|E zVTS%Skf(2)WGc>7mq34m|Z1hW8}DWCJZ4t1AjKkpxcLFqnQ~L0@eItIkIr$xs-YG*YVj!VZY29yQcb=&ZgV z6Ma6W%?>7+%*UxDvuh|)&XIFA30-*t-JO-SmX3Y)@oHtVii-uWK3quT%V#CD6%!0#*M2d6+bc7R~*_8}!XFaAJ=^Dwd#Ym zmt>8M`lMig=xegsC&Gl(z{gP#H%Db~>fx*afiJEhd(Si0n?-2qJHt$LC2J|(R0lTj zkYyIwk%m+ICLW$M@<({sx!OZA<$kLBQ8lfU5>ORA6*QqD?xkeZB~5TN6k&%cL&nuW zFzUNOPRype!`D3#7OWK>j#xDABYEZ*K#B{Ilby^{ZvmDS4x$r^79*0A?qK%0$0V=x zBw^AC7x+YaC#!0;pm%ICKAP{KbvI$aKZrI^>cQmnek3n(I&Xb@c-USrL+eSJ$c(2U z4mXLB>nGu)nMrf+G_>9Su+ser&C46N9uG}1G_Ps;TBIffdLSCY1#U4n;V6HfJ-)kG z!B&`Va+eZ=Z||ixjyA!OGyV#Zq`fHTi)@b5_E~6LTXCB0!IM9O$|eWw|55mf0jNuxp)T%kkPJt7lXLLy zCGh3d1EbeK=`-juqw&s8HhC|0n5(Su%|Y_N>6?;_UJy-A1rbtAmc$!ZX&L-DekFk{YLrUU^o=bx<)j5`ge4nit98MiUQtRf zf0S(`tMwy!WivSl^R@DJo0=IuG|&anNSwmSO5}X;59ir2rqBF)vcShyMfs4x?p;i; zC)4f_dV|@Vt7gNN?4ir@7pn4D-t`Ciob2td@J$6WXP)rOvy)}ppRer$z2GBl?NR*H zQu?Z^$Sm%J-e(vS++kMRUP>G0w@KuKKNX^dKEZVK0kniSHQi**`vxXi9hYV@>W-$I zGpw+aX)r(mZFd&d;p*Vy8#q-JgnhjSM!kpRm7OS@ADAbgJGg0`Ce&e~d2IWaRJUDZ zNs3w{$3y2CcLvu&u&STx9kOSxp)GfVlTHF7im(pnj8UET+H$5-oHD*Ku`~fAe}uYa zJS=k!x_*koR#XM49?a?fA}8vKd}pb=>uXWm&Y0Gq7FNMwY{Zu2%)~`g7 zCOB8S?C9l+^-OZvorzk1obc6^(l{o^@YTO!nwV+*4>jE$a};ZCcGE$2oJ@4z^yB^4 z)0%wZ0;S-x(|pd;IOD|9pO+u^UIe=>oF2;NFp{6v;RvpP zS61LTe5E;4hxVu>=_m7;DXmPjyNqzCrth@1W(3cOu%4#Z&q9jq4D_xA;G%M=WpK;w zb9^J0eUbMG84T|oOSE46`f^HjGFunXBbSZ6_A*Mw4HlL37eCtiN~TxFg`9A0>^upu zA92ict+{GH&hIOkA~T>g8%f7iG%DyHu#c~Ch-M~1v@}T4II%P+@dcjwW*WZE+x3n* z&W*0ho`ED}JKd|u0w7VCXMaylC+A?l*^C#zCLBR_rr1bJAfNn#sW&>13&y#u06B3g zzh;KMN#@FHy0s$st45))&IF3Eh5dXY2^D=%SWUG$Xo_u)zU~xlFP-H2Xgyki9&L7* zT^-!-J>~r!y(#XlIPy=zPz=CTFQaKm#|KZnOO6MP>_$zTZfr*9r4M4<4bfs)DxflYCcspk~yv zlSZ-ErFr&v?O_#tJ3M*ar%={c0Ht)3O<#-T*o%1bd*P}13vGP~bfgVIh-aVxdJal6 z5CkKVgvpO^UhmLzIbki^lh~PpvM~;QNj@^VRqHskrE`Qx@e0#pR_Qe!!5OTtOYKRp zaM7;C?&qFyK5KXZ{|fR)*14KG4USjz%DqxDka^XMb2T;|kiaQnMpnM3Hh>r2v&3~F@BQVK3664ayssL|helFx%0_EajfuXQ4` z^?=htHu+ia0RQ*!P&)NKdV0FExl$cFw59e{Xj(7JE_@xE`28bkof-r_I|q#V3aZ)c zFvPp?{5Qv8RK%PI&Z02SB#s8l+h!XnBne>D?Z9g*3j2l1Ux99u0xfyo{Xy#vf>!3CQS7aH&;A;` zsH&^0JK0mj_m970cvZCB{lh+y&aQdRx`sNNlRnc7erzQZbr^c$54Ps$EIW$tg(=Lo z*Q}#SX_xRfCF3`rNB+iS+(A3RslU*u#R&{a6<(xCF8;`to#Hiylg*2 z!jaKc+}+P}&Rfx+95y@RTGl0z55ud3o%6N!{&24+`==lIA|yU7X@>HgcZ9!>k4u!x9=sFfh(ArWK4^!_v6sh)c7N~F`5cQm5G_pqvG*FP`E z$d{xBD9|Rb23`?I(WGe+Z;>mrglvvM!cbw7u$o+-SEz{Ui?jgZd|yd-;ZUZviMZ2} zm0oJJ{jL2vne55VB>FowZ(ZL4zYrcDaWtxGRH=xiVG;gA-f5l~1Wz9wKQsgUNLO`} z5(09VD#hX~>4$fD9(lH}gheDMJJCm+wC(_}o?@M7T})YGAvo#v;> z${o2V=M7bg=QnQ=%adk1LdYqkvUav186zF1uXC0opyO9zd5v%;{m|3@1Rq)sKHXWo zkA5~4g#Hh1+^VF5UqeN@NL$O-_Sj|fwDPX=DPb?d(??_sn@Hl%UiV;E4YI05&Y0Di zX-~**a$i2$I>Jb_<*OS4H+B#ID=edCv_i6_x(^dAh%5^nRa@)q`7cg2HP)`E+VBRlvs zUXrfTIo`It4wo{{OCF3N~|?L8he}aTQ|Xj6*gx;0k;I@<24aM4w4;%K(yD8a6T>?|(L$d{fEx z+RVNl4^nf8Q^hm(m>hIaY?tHcrtV-LK{NJg8VOo^K9bEpnZ%o|I7n)sXO5=j>~H)M z&+!c`;c0j0Evw1;)&O)q4i(B_l=HdiX+9dn$h(ns*4fw(E_SQ&7JPp-?!`+G!u6bK zX47A}7-iET8XPm&Hq*ahm;a;TD4DL}>sknGvA@Qk!5GDrQ^8_7FkeaV&yPXJ?~xIj1w~X~e@`a)q&WzsoeZpW z+$|jlbzT$?ab(4wW`C~)6YExeFtK$UD@n#5<#|s3!%AmU7`RYccmCj7h{c_MAK%O* za;<9cp5^0?=STh05OjVsSB^5iLNU1n^?DD`tiMsU!O-t^GW(UOS9J$_jGaTohP+Xc=kHOe=Y|hm&wA|A!GtM zJ5GAmdX)QHNXovATdbh*1t|kVI9ulgKm5(q@|BEKCrRb)NDDp3xvnjIxWbw8yJ-lm z%}ZGQZ_qOoP@62kJrV&sWniz%0Y9+XnZrFBR%Bf8ME#cbgUoV%rl~a`7~tV^;RkPv zlV_LE2dwNRzPY7%Cq^(!Ji#G5+w}`>;ElG%J{0CPj%M-$w%;VG^(P@b!a9(5tp?|L zbTiDdSx5)yK#t#Q649rj*sc>i&le*LC6@DiJgJ?boONdhH76U;FfZZ@*lVsC)Rxu3 zGk6w$pq^Av_R-y{k&-;#k>1r8w_Xn|kKLkXK)s)pZ1jbkrz8;aU2r0O%@1&gq~end zF|I*vV!|gn3$1iPyt?0T#@=V1d4tL*3{86+Q^sq3Q8<%3bebg@i=rj13qLa*f9^}` z2H2S}T!Ux$@-`{E)Tf;2XE{S%l^p4{!?18`S=Gi|p`o;PE9}OMAOgixNr{S4QBX_5^ zAj6H#LkG}^b+4h?k0i&e&RO^*7ucI}lCKDI6W|6O2p)l~E)eosq|RhFtu+=lp5WZB zGaQD4$VYbNS@4lzpu#nEm6&4dqhg;7M*mRf;2EqUA-W1a4i(3!mDR8?{J<>Ed0(vi zP`8yr-S!J@U3%_)Q7sAA&kV{;da_?Sa7XTN|NHCD>2okwWg_j+$}SMY{<8`1LVivl zhe61D<63K_jN-jl9g7^H+DUbS(i_Zb7CM(3Xd7ejg7TrH9f(@EZyfURx*G&+Tt#3Im3^1Rd)hU3GPs4qDi1*omj=K*S z&3n2^r=TRQMGiv={!Ap1#g&|HLr&*6iV=kVptW0zd zn4<$2^;b}0hhsG9je_zE_SK7Hq`R;jl-Oix%Iccl)DO2vAA{KtPp;Ejn3wvzY1hEW zx^wM9w0HVI$aB#k+8(Sj84p7MA-{^Yax!0D0}{ZRGiyynMg7LSk?fOFXr3OC)4WKU zP0rj6wUU1;bgs!Lxy0(|B+9@!MUtt{!;uM*Nit;B{nG8l) zEHo^rAvd9?&dc925S%uEkoN&oQt+*(pejAcs(T67jvwS`9_b@tAQ;EQ4d~b7Xad=Z zYa_(b-X5v`A~*A`Eu$?PS06>=#~X9mV25Qxa%Y;512GY->X%tx-*ENpTzvv;)MrrI(YOTy>E!>*UNP|m z{v!8h8Q-3p?`{{)ovwJNig5KJXo=g9_;b`e*-{fW{;sf>^{$)LSsstFGD6ci+S+rd zp-P}lPqGz6K|cd8{!dP6bAvc(DhT;E5Sl=P=5+YKKj?R-gA12LL;gR6Tt!13!<)Y* z^j>HreAzw_^4|Jea1(oAgwGf|bJ{qIva>Giz(cO_~+EE-%j_auB>%s^= z0ViGrn$!`5yffIsa#IcS7xNBurR9TI={_{A%SgdUQ)9>yy#_bYiA?@F^u3G}x3Su| zt@S~wUb3(6L`S_HUi%h!e|A*dvq44!ZNZ6Lzb~9X6Ec@NgU&AnG5!Wh-G}?01x9=a zY~*Ct+Nnl2=k0E^on5gkw${g`_LHQgBhm@^vGPmpr|ooT+G!HL#>nGnLr5Yi)ge@3 zrM(VLH5eUZbK_muiOhxoLat}M85C?vz6TSrl67_>Utd5&em3+AUt0@S`ZQf0Seyqi z6T1zCjQh!Cc!yJ|7Fn(rVFT-n5hM$~kUpb8D2q#6@9ao_=R@V3e2O#t8}dhL^VT0n zx7Lb`;H-2wN+d*=;Mb1_mwXRG9Y;&Fs{2Ae?nw~xqwoT0@Q~SYYRw{fMTQ67L%!KC zu-fj%uds2s%=h7h%7fw@5XP|1myset?dqvRI9b zM)qG|LAOw~JOGn3^Xz+)>h_fD55t#|mz^~u>1Ka$D23r@Xipl*zd9ZG>3lM0>hQj2 zMFCI(uWm1V1Bc1m`HPmfllTV4!UA`o_vWO%05hc(jCdSQ*ydpCRkCCueQ80 zS3<|^=GSL4?&W0j2X%O7_>uSUee+=b8pFw!=X_BYJ^2V&iCge+6*=*xf)vlC|ED*} zE0au4CcJ(Y3B+!U-eb&)bJ1Y6`30B>s~1aKEoOSyW?Hx(qKd2&A~i|1ouz z(NT2kw#G@?OS-GN+M{@YAi>>Tf&_xQySux)ySuwf(BKj*xDyC2f%|m6eebyA8=SF! zol19Cty*iob3W5>gxSC?8XyEFLb0^o+=nVxkGV(=`Y%Gs4UD!2I!@yzU2U(8KJRy& zgvph;?+?;mTEnuK)!yFhq-8GT@rJUTl{;@J6$3(*d8*> z4cO%EU`ys^SM7k9kQ={cXMA5rEL|b$J%jDFP@Z8OWSc?P*>8JqM-^C#*|iHe_{Z8t zaNlpFIo2-LgF2MX5^Fw<=VUGOiG%$5A4y%+W>eUi-^=5F!yA8Jt$LG)-lc!7cjJZH zhtH@pIpq3Gz3ZVP^d%d02o*su-DdLL+uF|7Ug-rZ`imCoJnj16$>QGYjC4G=A5@p1 znaqSx{Y}cjw|@f{@p6(wW7yv=G-c!L-kRjrNxs+WcwqkMACkI_;|{yYJR%Thc^l{_ zuX)0!<7jS<<1rdNsTHi9dGwY(AdA@yzlF(`KDEoSi8jxX=p5zV;C+Ec`_nN)YfqzG zsFI5|jy^C%bs23I!EMBiagKKF5F8``Fl z)dc0PEd@$(6?}~!#7eNC!+GOor(>)n`t(>d;fJu#I~eoPU;UHo-Q&FU9$%lwSk*X) z#S8dNP@0j3GzO>%H&`07O z{Tm<94xZoYvYP&RI(OgCY_pNYTXI-Hjq>{~vX zM3@&HaG1ZsO*(_#(E7qj?zKZ`w)gNkl(GJ1W#6MLWD0kJtcKCm!hOOMlz47oWVi#PzHKo(&G|$ngE5Yc!plnu`GIL(xIOWXjt_UGp4w@Id zBvi;^30n}764b``&9e$Gbr!f!cF0ThpjB_NW#am0Paur-NRrYP314hifWt8 zJ)K~AXh}vFbqbZ3N9+ND6D@8NtMLnl8TQapI2FT3}Odw?sOGtlwfo|#;DO=xdtm`;qA)8R2q1AEB@i=h#;>~rYi zjbKM-XHG3x%xI|DP}Te(rPJ6K1KG^YP)J1&xtkGUYVK9ROcDE z>}9-XeKmvMhfE6H8ypfe!Rzzfbxnj-E%Cei)C!~(_n=^Pp$CZ z-TBm2-Lugf9F!2;G-N`M#W%_$(Ff7bQ301@X}Zq3(V_W8t_x$(2kA~h&j=zRT?+@+ zQq=Ka^Jg4`JIS8SLY-c1I?8m&3`KhcS%Pe^h7v8&aE?mD8EDIWHv^X1Z|fQO(0$c$ zBp0qY(z*(`7kg5?TZ5v5M?-m89q(8bYcsk4GV`u^0;T&REcnZO z!zm<1D&V`j%4*vej#mxzg(}QOdodF{#NQFY-xUvAYbms)36}IQW?bTGT*RNGIeh+L zCIruvH>#lJaddQEba_4Nyj^@7Jw@H8Sm$$TKh(F%51Y|e!a7L4z~}DD4zo1sSp*7J zew5;dq~h1{rpw96{vkT`4)#x5IVav=H=&{H&7e;-54{LKpv1l>>;J(rf;r79@_@-S zCHEwm7O8}&x$Sj%@?OA(zwKG-edF%vN_MQ#y2Es=#NM_yl$Tdhlr#$MtSY~Dm}M!x ztCgm3QyhdBCq9T(sHQd1Y_l?Z4x4K0CW*9MiWE~l5KtUZI_cb+i3@H zf$!l0yw*l=HY(ty?PA}jy>)bTm2oe1MmWwvs_w_y-iOwm1b*>q;%ea|oxI!d&X3{R z{n^zlq1EscDr85lYCt?Z*4;B^V3@>57ue4i{kVdTLR;-|=^N9(_QE<8!?L6XzSHw`lgU6bs(W@$ zF;h6VSamParIw%}^@4ZOjT7W-&b8Oj$aACD?B)8g@Ue5^;m?9Ap**|#8F<)#TXt~o zh0`SXKt5qT1)n>FQ)FMqOZ#%Q0WAcjaL+fDX0gKP&<|#@cgc^h)My+ZiXZ zF5=DG0xteknqzZlAt>bK)y&FU-YOYLB3FT7b(AD<1@ml(S#=>67e<|rMYmc@qf=(x zd6cWhc(%>xhVRi0UgM_B1nH$Js>VjHpO?GvGUvJ3_+Un&Q7^;A{lPQ~f1Q!`(kbjZ zB5?o*hI6v8phD9dt%>Wiktbaj@Yx6E80b@b)?^z-%otQXJfgc%90=*Qz%5$9Fx}scEHpHP;e&Wnngsj3!*aAU; zZ%|8@qS^F^J}?Lm_aZdw2Q=E1f!BK;4}VLXXu*((bZ{qq{PwM2R3D?ivmE`M*Tv1O zIwN5fUsUqhtD;#=Qd-$6!C7eoXJr+sD5Iq!3Fzl!PuDRUSOKjm9+r_6>Vuy(@(tho zT-3p4XlB*;7lV^`GLH7g0XFoEm3;d}Q0RZ@nnRds0dH}vF+cDBIk?};+-~~~qt6R#q>Hf3a-Y0qG+O0f-eu2OS<~s~qfI=;&sqjA@nLky##}ob zC$)^9IT%lE9cBeJ79xu+;|Hh$ z7yc`$w4%)7KBAC2r2=AOQaUGa6jX!x;Gc`!z{TxXiL>jj@vG*8tg``SvKpV+4r3)V z|5^Au%HgV=gLWpS(vp9{c-f&-(F+B57x`hkO)^zLu{(}p*GLSbv-hhUXv@aC_6=7L zS2Ek)%U@B6bBeWuG33#{nM$D&zd)~u*VjvRac9w8Kq<=(8-3IN=;VG6d0G_mKu9x1 z(JiN=R|c{UEQA_dO}9lSF*VIZRyha$tC6NCW+OZ3F0D-}IYs&+r?Yw4=e@J{L#@lm z)&Fv8&dz5apL+G;=oN2C>0CrBdyi6>ja6m{D(!2o-Um%O3w#s5gWXSA@uXgTCRf*| zdYL~3)+AZuzq-yai<$HTDAlE5`t7FCFPf`=mp;iEAQ|?7BRG^+aKZLg&M1pes+*7) zIZcC8UB3AroY8Ody#41P_q+G=lNH$umAW1ZwG-!l03LF`LSBjcZZT_s6&l7GvO^77 z@%`Vt%z9gtx6MRTMZWoiXm*X53#FAar}hO;RdZ|e)bffK%8MlDkScN4t+zbDPuPsa zdw{VQZ`GD0{TK4IKSP--PaD7)?r%R6KNsq_#T-KIV;osujYp}1COt<7SsVC$$PsBN{6bfR~G)muaEE={68^aGUWChQ{LQi88G9y2A?QlId zMah|LjKuvm2MT};Lv{)MGcB0}51{+#ySiP=V}HeYaf)>cuA+VHW1T_`D9zV6FZ5>L zT!*{98Sj|6q((mA8;<3@mdxi|&lGYb>+De0x#djgp7Wbm;FDhrbfBi5(S`7K2;h!) zlTq)A=kF{j#R5VKvx$xHWhPkH(CHUtmmK5lxz!&qDsRd!r9UM88_*C0puC)A!sy{GGlREGR@z%1qL1$ojHTVLB5unV zNMh^J=QH8V>LTQYUzsFbkrQ~!gsW5Sog6pe*Oga7Y+h#n`K31ET;V+Vv{?KWzaf2` zhiPyXO)dp}v@Y|3IPzgln2gz(4}GDj^>aX))G2groaMXt)}!E^-PYx14ytDgEI`~S zga2>3xvV9Puw59O`i8YxUF>Z8(F}hVwcsWRwVv$i`pHA+YJMsN3k`7=eZ|GJ2O{Nk zcG2s|54=GIu0l5M8qd@K*0l2c4F#EmSLEH&lm3-6?5`qmAROgc8;Bbw8gFfL2y*k_ zoID{ZRGrksH6~J{<&JcRu2-I@v05qT2CcmPpOVPw?IKRbUt(cg7n|{rRbv9LGj%jR zK#%*x&MK?^0h(-8_LA>uB45RuekAM9NLK%4?6mIFJCdL2_fgt^TBP>AtcGo~-&l!H zKFyquQ_WIV8V4)Q1Npr5gUvwy#aZpPGu#npAB|E}&{mSnOcN+GapayGk9e^M<1C@F#bHGhB zF8#*&P#)jg9vtkkoF@x17nzDqT+-3rbgSL#Yw1P4fxS%J#^M0!$1ZL(dx>paIWx1PVa)s;WO82{nsT0Pfr2**ztQE? zM)(^zUYg34@OV~)fH2?wUhC;RpMflD?8(Pt`)Q~l%3*3v95SyRF z)rrCD^js$UX}hjuVox>G;dM>$B;fLTtWCE!f#z1kR-NwJxza7s$4vA%oQ;LJZYH5q zOkp~99zK0A+0=c!KRWU5tH9q;k@tTm^zscjtz@QmTX1rB=B-v29igH59bRe$g}gqD zm0QwG?)Fx;wzyqZ*?(zK&I_*UuyJ#`*5aTKCO_~DDzA|}RtxBj8JI^O;q*QY{;pr4 z-+)%}j+|{vNG}=r8?KT(KBhm(S^6;(sH~(5W|BvbfGYZ#6Z~V|D|a|S|FX=%SmtnF7E5>$?Wcn)9bc<3!2R!Qs7tFX%u43e=bx&p|+wPIC=W= z(q7q*Z{Q{GtzpaoYLfeo;=ju5fCk{OxR1N55qxkFKlMvfYr4h!>cI%6pYfbTr;Y zHOg$>hI?BxJu>b}ZM5r!PSJtc({$qoI%3Vt59X3SEepw8gs2^eN*x0GAx1LD+hO%} zuoYLLSYrljn{f8k#yubFD-+T!=#jS)eDcmT1N^k#Rj=^t|FxE4-91HqWD*p~ZYbn^ zSo_zS%X6;Xi*v6&y?QQ_nIu|CeSNB8mP0%vMoWLB&CEUv z!bDDii|*Fyll#BwD(uzw%;S#mS^{hU1(MMoa$<3;B&W0%y+w zxi8tIGKz49-%naqfqns=oU{OG64}afP)Axe%1icgR!CoyN7@v0GaMpZ%!v z-R42ZiDO2wO486vbBf1>wt|Aobe^RHPSfI++?Jg1njjuJnjLjONH`S{R= z!7qFbAitcYEntMBrPdKr_B`b!uJ$pohgvf=nuHXo{1BX#QuOP-Vh6DuAMJFe z1oJH$VGbn2{isIY=Ot9TuHq%JfV7ev!)hkM*RB0+xfG-NNIk_faLw`F8R)L$*^hQy zIwXa8MLX|5_gUr@v8=;6>=mH?&`xB{NuOyT-E(FdjiXQ+`U=_co-V;hpMyN*V;oI~ z;nHt{$$f$3w?N{f3)=Zl-f{EEWY*zZDa5x@40rQDw9{|4TgozZx_z#8z;S~~QGL$_ zZ^NKBK^c96JT`ZnbAh9SR?1#VZKI4wx0a!F-;^4$5;ufiJXr`s!yU+V-;p2apUNh8 znA745{095Pju*C(c?^F|I_}qbJpI++AGpPNqK~Vg;PTZ>=vES2PI7C;p zd#$I8FW&drGt8aEb=R?zj)azKTe!sstiR+Kc^`iEEhH)S(U$rcqKOAj`DiG@>1d{! z!>p<$-CU*luNE%v;SlrhF`cV~>--Js{c^Oc4#FD<3=hywGsr7ANoRx5oB*Buqy2}L zi>G0)yR`SNSMOQxs^I*iU9)c|#juGKg%!>GFr=F~%&6uFE>gSY$Se=T9rKLqHsh)P z!nFSgS)o7^5(PSi9aS7+iRiQFZW2e+KNk3ec#3I#D=;#gb zxF)!odp>!B-6x$b9UgS+56WxE=vnba9Hc*Y5bct^gx}C+td@1=66ORZl%-9djoXc* z(aNLHQ;jgcQkVq?;{a|0o8%mSLwzQcDbPPIFfrSU%WyZ0{CHY1jPgZhlr1<-*MLP5Lf<)ik1BlPWq8UJ&YXv7 zrcCBKH`w+QCa0(wpV z;>1|*YV2OljOGdKlLa(4&$b?>>#q!}UM8_Mt9}D^Juzl7U`!cS*D&A2$N!A!hz#?kHT(UWkP3UFl;8y7j#HW)ckLc{dk;CRmPqMK>r=8|feVBOZb1*NQ%v8t4gI zV6$IvWa4B!j>%X*?zgq9E)n8Ta;o7ds6W|dJm*eIi{~>RIpx{xb1gK_?Z!>nm0f*J zeBD*xB(z}9yObUNPv|3kaXH#h?w=bP&=?R41F1igqs{m{|G}$`p%EsX^$BOYbZSxi zBrVc0oQ$jma;?tlkqb%vnSeTk&YUhIAXN*bWCM)zQS7hkhccb`l)A@nio&4j0y*a= zq1^nzVHl48rw5GF1RQ5=*$u1g^OM=B@Wrx@XD53)y2l6TO_ScEf^bZ@z?fydDS22EOx$+*`TzFHmqhbG{KcVa0QbU59?X z5|8&0oXx**`b9&TJg2kbl{tYMWP~w( zZJpXhsRECnK5qUMWE8!yPxj&e7+^|d?|9P?WB7^|T997NRh+G|>ArKST7#RrS70*~ zj>fpY`ryXfi?>_SRcCr}nLD5_g#K!f_Uf=E_A;sP-u!ce%|bg!Z@=-jpRzu(y;thk zf3nILaCX1PZRwHf!mYhQCcg{a@S%834aQ0EM>dj8{=&Js4XsbFxXuK0^0H`Z_COhZ zB`7d5)!V%S*PD*B=L}9B1ybGBLt+0+F@~AWncDIW^pgccpvLY-z3pe62zMxjJ1>KJ zg?YgWI=>!^vRDTtE76>T3DGmAj~DU0T;)DD<9h235#bHF^nqL}1V{NNsN4zs_afjI zbnGbnXS0|bSh*Yh^p#l70Hq9Z-1{$}uY}-&8U>sEjj&$qA(f&{x`M4fo|LxstI9H4 zm(*PJ2KKcgj{2pf0jooT5cuRKcsEgG;>YNUa+e)|R$4MpLd(01p0O4kcNKoaljs|1 zQ23hTwR{v9#N6PFE}S(eGyWJe^ufw7I3~e1{EfT22YK0yat5o;=1@A4Ct9YoVP9QR zZieq-D;*;dmW~j6Wm6w=3^CkqUGRHtA&+fD!yM0SKni?{aV90;4ip_ zj+GY`Z70e?DNdVzbWLbSs>74t9iQtyc$PMF`;pA64LCF|$?@>PbE+Ba?KsnUaJ&_j zT0kE;hS#Dj=cy#-zPp%D?c@ySZ?-I~d&fQAhS|hNl%ttkxfxA+Rd6;pgbOj2*}-il z7nME;?+50g zkuiyxMItkcFNWDPBD^%sH&?TyqYY{n4!9aL?KOq-w?lQq8hRw(mVSy3vAi(Ua)6y% zIp#$Fm;}G%4VuC#QyC`xYVK(p>gj6kv`T#EGW3x&{1*rXBnrRvB<3i814{Gz+$U2p z8UJBJ-Z>5M)sHjgf}=WxbJtJHDSG}Ikd-cJt%bkZ|JnbN7P~EdMMtPAjKt-X!CZr@ z2O2xT)#|QK3u~wbpWV+!_jfz4r^~e}zqiVD)1lkz(2xuL@9JrpX-t55l!vRoV_J1f z-^lRMFp;Z2HO=Je8JLrf#UoHaE>22(jdB@zJqr%|*>_#_jnCdK-xU#=bH5?teJx=2b0RbdyX2C`;lsYSGj(*z$|KW6| zMK4V&Ql0IW`R40EnWL?l8SQ1-y3Mw)cx`M_l-QPryN9IUTboX?SDZv*Y9hOc<9InG zw9C=B>QhLr%;h<+${qh7ojePFNqw~BjU-#_+;#po*Gi(k2igrmCE=WE6lWb5O^JaKQ7aQi%Hsim!@ru<@u?oORGDAv$_bW zpsI%gIdThB|VG zr+x*`*i`iTrRdk^13seJSA{cn20D3z)GmU~v{$!4&l_QM(SOt0tkS>K8>g=UXT*8= zKIECowC%|>aO|e@x%x z?3IgP{WW`y)nXv*h1G8x?zx^1vjXRl^8DP_oVDI9@*?x&##sWU=XuJSZ z+1njL$2O2Q>4<{-h1A?iW+i=CXL|pSPJWB~Jsc0@P?*VC`Q8J0yH}z~wxVM?ds;gw zof{OWi;>PvWhX z1;6=FH05u)qIl51kX$;?zUB(asV^iJv*JkXB?LoST1j(rds-MqD0}eqzjtKAS3Z{g zd>izFVbX3g$z@5>{6Ql+jic-kis4l>)3k=o%&PWm2~apId$C%vta?yKrRW#Cz0|b?*Q!n*yAj5}5qX;#cU!uiS$f_*8bBeix39 z-P~GzGFib5@Tw;nGeJ+*aD|q)JjRU>PEvM0jDiN%GPah=X!Wo?pCj2Bf^IugZ9*SI zYxux(AfJd#Nzal~olk;nEJVY_^!Z-q`wzwqGm8^j6x@|>^!mi(K)T8)>Xj}%dyr`Q zu1@F!(U5nrlOMxevLET05oR~e(5k`uR=ufZNcjXbP z^rSyNv5GVBbM>(C!)ufz#|aH6siZAs#5w0CMY@ZD^$kmK8BU; zHEUZxGSV)n>|fZ=Jc6b7o<`ANVF#zU%+f)!LowE>^bibEm*XvO@9gKE>@38rY?(S$ z8I9*{BHDqDJjo8h3~%ZmN&lawDfo!@8QbE(+H2^AUM=w6zkuUxCFkhHoSskdF8im? z!LPHL`@AR&!3+?>Z{sabz+;_anF+`6BCC4=*$nCEwe7Fsv^VAiYjsud#Jc`C=JVS} zLOzk1)y2xwp_Aw3T#*(}$|v(6{0S>jYac;|Ee8AOID56`G#lsQNwo5pcsS+NLC08+ z=P8u)?g6~z!`MSNU?*3VM$uj{Z`LxMGm_0-LRxOFvKo4+j%Kw7E{nG?bn5&lpX*st}~w3NXk~jyO%V&ErpidAN{fiy5S7kOm8ufjV2$eS7g;`FR2Z3+;n=~2R!M6+}^eB@~*e3 zbn^P#`@P}b9EJ|wM!E!(`Uo6`yEvKCGqr1oK6s2)&DyxhGoYqCB22;WHIHti2hs?+AYNN2p~@{h5LQPQ=T6!LS9_ho!M;VFNOwG} zqbF#mWv5m#mtddrKC$@&WF^u!ocKQj@TWD)ycJ&=c`4$|uL-=nnj`o$f8xz?- zl)-s_kuI-+XeH%@O|;kUrl^rH2xBN>( z;-oyJ?oIS^7ZPUBbx}gxAj;Bg2pFfx&1A8?fKk012E=SQ!B3nvcN5P|Z-<}~A#=m~ zh9(Es4*KPt=cx;I>6hc9_R9WO4TosD*CxY1`6LgL)8Nbs;W_LD0qP?T^6}{R(LxEK z0RO5BEz!-_k;8PLqOT`^-Im=;0eLr{`67EqQMs(l#97`+Ysq|Sq3fgD>TTdV7Ze+^ zD=bG?&X5H`R^Mh%2e(X@@?PzTJzjmSgy6{9hEhFJ{wGZ)Kf6jSCBA@&UP?$K#GykE zghf&dCU{j#W0D3_Eyw7^&I|YBEa$|bd*2-|dt#Dm) zyS#&Z$w8+=)KE|GT%XIk-QC$0=6nJf{UX;^lqR;t)+D(ZDgCPGSdE|_4M9h{#w?~1 z$(mc{JCFyu5W3uH6%1>r8k@BkgFF-o-}m({ZdqPoSB?33dma|2RS+$gvAIxac6w= zXGt;Cf}s4F6vY|lM8{cC-;jPTYVKp+X#UQLVHNb99>Pl@Mtmf8kbdGUFKtbR(mPw} zsrH3|aLn<>8R4GlN%Srb5`**mwtFhG-Ys#oBO#w#Eupl9Tl`cm!IU;53fgO-5BK|c zavaB)54q@@TR{gvWm7KZbrN&aP@eS`rWqvE{+g;Vq5H*I^)k-d9c1tii6sjz+M+CvoxY|g9=NlSb zLu+o^FZOcZRVx&NzRoyTxaWemsc)>u=$?toID>W>hU*UB({ zw&4o8!qinYorXeEos~Yt@QmE`SyZumoRLNLpZ%cN{WI2Jm8Y|W`DhR3!Xrs`>=qm1 z_Bteww$`>qD8OQ{x%FYF@e4g{3jP4n_uiIC(d%6 zd9o>hjC^jmc7tJ3eB+99P|2I?tFecyg2%iIJIN!cBsus-j4jrrRr8l^=^NFjQdyliKQ_2)CQ(2Y3D zM==2&%{*iaJ2su+6m2W@@Wf>1Z26SV$R{Wy>2WCe6NCHozi=HbU{=$SH(wLe3)5h; zkzHL3>6-oGKq*qzS(B{aQX9+bYs(zvUH4#1ZHGv&pqJ`wlC>BPunl;y3ea78%Us;N zf)mwjva(xnBKbRiS~3^-1!-b4eys8MK*phru3>limJ@RwzJo+awbKp1;I$?jdz#yF-NF|59KPE!6DWWwm}fGuR}fB;4J4F%9|~L498^K0?sq%NpSetE9aO2w>6(- zN41oh$X2p>&)LtGMnj6{Jlz8=r7((d7^jE=X!LE_RiEG_;cxG}rq7<56deVDVuh(N zeC~;sNGOs!(MSu)9-6~5L#A(OU$2EbcRSNN){{^!tYn4STaLz&RpKqdCbXu_@h_`L z9J`m(+}F>b1{T15vIXZ$Wt~g+i?h=e&TjFXW&TUaw>Wh(@#Ciqh> znN3~d6qlbCmJ>9BG-HQV-WJ2Ve!IPx;~~ARH<*TXqvvU;JWV>mNh$|jx!cTNSWUNb zw@qi)x=mk`yKEh)Z+EIjJ{HlW(%XzlxK45!BjOFu{+Z%^pUMJ$UwJ8l&)@ zEro>;j<>y^I4Gs5L zP15L>adQ95T%s#ZyL9weZbvs82M=RBI^DK_O94M10<_>H|30uF-murYDyhue6ZqQG zu>);p4zj$2-P(s;N2KhsX2tW@NBsu(CfJ^!tYQ~CQ(g@D`Z_Lbu>?r5isd|%P4w;5) z^k?QFQE>!+ab*$>I(P)XtPVJyhshBBpeuMV?WJwxzS4B~Qm=W^OX0Y>O&j$BvJB&) zlOI5bN~_z&y%xk=Vh3tv3z#cWIDLzt*EPlQxdzXr1r=p6&2nY%=B4P`(K6PJJ8uI{ ztn}=(XIdHvL1G5HZ%1hJdug+)vmkUoQ|Bu6$WqjRvor+dA|AI(4s%yn2qxn|yoUdA zqD$yrqZd^V%p7N*X>LI`JdkCg1oa zbMn29=lS{qBYR9hH2z+9DtpC%zc~+6iox_NzTmg-jfNvJnYo@yKOu?1nonm58gU~| z(qDx*agQ{WHi-SW-)h*aX_wT2N;z9DYks*5tfS$)RqvZE=7vm#e)875!#nH~t9e%4 zW!9ERbh#n$4AevR7i?Kb1{t`N|Z-~J)4`u5Bw4A9BX>+;Z|?WdEs#r1ds`bjh- z)7Pvx>u8)B&s^lZQW^qC99OT+)uTuhG>6Q-6P?(CyLuh_mp0t-elq)HR=8^@kp}3vAhpYRi18KRskg8F4XFByTz{}P5qtkZeJ(QohOe8yzHuSNaq7R`CM1&;aG`i6c z-n6T2my~k+?&r~rVp!vg$On;~W}Zrh$SZyqZ%TXQ<23qd>KKT{ z1?=x>$es_!Z#!LrFLAh3qpkQ9{=Qfyp+(Wjs_CEcX(Dvbp^4RkJ@S|*ekxO_R;)KI zNwJJhB|T+e1s;U^*TP?VMCbQ*>kM;A(OfY0H)X|lxx>;~C=T5*o%|j;xfA-y9=nhE zdn7x$Th<%wsZwxU)Dnj9ZvX9f@GQW9+U%}Dk8BG4 zB$hqh0!}Z#E%_iYoX1x`#`v12?h~m39~$*Qs2d-7(~Lu(E=+r_F)$EHyT**L1}gPB zW>Ff%>J6k9o1>`tx$ITRu#86^e@ypFQ!@IWxaYRZD^fkiW}FXMo#VA^_C)0XU3MFp z5Ilr$R+qWhRVI?{Ot&CJ?m#0ygP%aqA440>r~89Ky%bk>TZme<_}7B_5^vYW zyxsj|w~cr&#xQ?gVJwKIG7+laE6X;aed_Kall41v@!b zXS>Z3uH)(IN{3}Ol9KYCU>UIhjVBAW({opl=bRU9Q{RH-5qA_fI5V|RYz3n zY25ceghI5^$J2i@7Gx(|udkTAmw;$Gn*@u3igS@}?1Q#fipyRPI{69L7sqt8s$_iix1hxS zL?Nk|aQFnSv(m24GY zSWba?^apS4ViJ>$+0hqZhgFp8ccN$MI6mr1FU+-iGy@>C63v-x6hLTZu+PCRb z^i|NuRZi6g(@ax1#GBTsUY{6PhL5D9@=og(+YVTUPOY;;=St(rjlZ)xY`d4rP1{*? zvP^O=sTXUW$POz3H{Vt|%yvKrPsC*vK{9zaJLX!<}?VR?WV;7R3yDrvEfHO`9eA>PIA91uinLMQ*lZ~w|_ zvgV;R`6Tqx7Q!t^yqj=VAA~oSfa;!$T+K>;gTmyqQ(&$<<5&Jkf*>ajjcJC91_>?W zDBZ-fAq0$p<2#$C+RL;IsnQK;CCXg`&Jq38DfYdZ5jyz?cVS;U&ttsJKeY?wRR=3W zY)h=Cx%VnbQ&GsGg%jkn51~e0A@i?;z0?x-(Fb~j=Hg}Q!tSFDY23+%O;Auo)a!Y8 zEJ~B0@Y1a&kjs~ZH6%EGiz}p7qy*F1zSw@j;*W$0anPB~ea2&lPQJ;V-*w6{L2JN@ zpN$Dg8`=x+qh5>=-=dJ7fUR*0efE!O8EgM{(jg8^UP-s$3vsqoR8C{P${Aucx>20{1KiZPuC$(s-gLnQd^72lo9%4o z2%|ytsgh#T+w$V9J_oUP8m&+5ILQy-T(^W7-D~J7jZ<}_D-dQ@;G~(CtU=)$ z2^T#SW&R;k0lqU~7yg!;^iJfKAJhFXil*8|YA5?Fdc{OnfATw{)Up~lTF2w4 zd1nfO&2k7|O>a(Z^-*gZv6twHqwhL?&Z@S;N*Gy!Vp?0rVmj5Tc@Ck}>O)<@1AR%J zp?GSaI2LFV?NgZ%Y_la3@in7P{&RX2M9F?}Gl*Iq10Njpcg!h)E5Sz1-WWCI%T+Iw( znRz=L__r{;N}}DK#7*4|PkWTOg)Yl=5G!v(wTiK+N)j{QJN6fv;H=`B?0)HK;JY5Q zJLFmT!q8X2t%4qU2SZ1{j-Pp=Hq1Up%QFjMIXx^W~Q9WdI>jKZ6&K}wwtuH4#8Q8YoGOG z_stC|9Fi?;Sa`qC+riO6@4d@BZSmFHnGWX0V>&?Hr2Mfpq?@6H^*k()$I@Ua6cWim zu>jvgJWtYeXe-@NQTxN0*$wl=!W?D1c#kyXT#qYtlQ7n4psuCAqBXM$rk z6Ojk*^xihU3qkclV#3md{RDwFRZo5@wUfS! z(^&tWqJGwA=a*!qE z3ASy@IQS2Jweir=FS~4>*4{YZ^58hU`yISV?uD+J&ODBc&NG=wYZ^4Y;^vO1(}^Ud2BJ?F5f*Y@908qr3JU#h zGWZ#7w_%?QqXA-xw$pJI=1(KfdhfuXxS%JgtfPI-?v6?%C-bQF;oa=EX12D3GFOP_ zEdtI@Ay&M`%w;#4n{vW@1np%QUh=9iSjyqAZkhVLe?TGWZ9ZrA@mqYew58#uiTH{% zhbZsm`c7LCuC6U~{3K{8jvTI0Bq}ERuJWyqaR<9@I#%PK?})>5w(T_BmlpDVc+u0v zwBkT~D6~QHwyDA_Y$d+tFw<9d={s5JCPO?~&K~9tO$)FUY|vAn^^Tu=*pp z13F28TTtI?i^05pO^GdW-^;~trO&1QhsS7=b9LD zo2B6QmN(yF)@Wpx(;NrXYxMBhc*a}swr|S&b|lW0OC$t~F{Mqw(KQQFeQy-{Nxb8h z2}M|MCz6E!BJZXJW4bb%1k(xT6OCN2+?_p3T#?Q*tgxNcMl`IAgYA@tll(H+Zgp|L z6iR~OHDxaV|+@OCXkvF^x&RK61vOk8(xHtn%{UBd;z{@z; zA_`lfM}8M~kQ@uLerEpth89JEXK$0UgnO&|9c-;I?KKnVGq(HI6uFE%5QW?)cBe_Q z6sfIX^IEbBd!gEVZADAH@u6lSouUW5zfIy?C=$R~@~X%)snoe|F4FH}m& zya9*P56fH_l18XoQ{>JNEUV$9U5k6aj`Olpa_qPFhKNv!Pu?El%@Z7s%~)9smNw8R z3NsOjf+ZMZ_>B_M2+z@fZ9~mbs-qxg=fUq%2bE|J8vPHHqA~Cv@ZAe3tYs_AqxKE^n9P}Lb$yKxgmecR1rAUk8HQCZ`e&ovYXz;IkG(Lm9Ok$E*Z=6 zowsBjvY5m`I&_4IXm=5437_!|Cvb9n$!SLAZ|I5>?5Qp%4y!Aioi~u-SZ6GSX3__j z(WznW9aE@(*Mz{fm+=N2D0QXICSO9wVy1xzMP>fERdYQeP zZ)dr21@$6q%Fr&lk-Kf@GbK3qRD&6POK zoy1St4nL`v1YvdfrFU@MTx1v7&{hdzZ#!r|2ZXOo;X0ZRu&#E7XjO%bN(X2RYw;5Y z;H(_*|Fz0ZMI)aAd1X8FjURZZo8hv1i<@;K3V97OHAPV>tF!W~;v{QgHZz8|ULi@4 zpUEGr8I?ThWV=V3rq-da)@}`vqi~T=C5iTz_w^*xePaRRMlwNb@HE}SrA|vPf93YjiU|!m~lDvd(lKP;OFfa7!HAC z51+Xej@Dvm#f4F*o1hV|4!9YhBULb$ez)SRKxz5Lp6ff15MP|C8|^Xow-mrpdQ;ql z4`iHm8KmY=d!oG(%-Gk~cy@2U#Bi|+@AAFO_RFSHs#~$Lw&reM0*T=j&sNPqU22n} z-_09|PU+xZwtzCI_2bDBd<-bSeCPuH`Qd1lRk-u28}1kez=^(rQd$p{_@!`IoP}!D zlf3RC#b7^gFR1>t#pADum%iX_DDD z`GyxDLj7oqvmQ^S^=1$Y3LPzr%r|(e^)ue)M1G1@<~d4bur3~rI+EnTJ|+=D<@M&g+7zUJy7cv=5%cj-vz8~<0IPm_A}5=<)= zr(V5z>eXAqABmvVFB{K%9j?9=Zf_oZSI4<}FZ}D}@UM5~baMqy=MU0|C*(WuN@cN_ zfNO^YViA&r==GC!R>2!%W&8o4c%PTnh3pZ9QI?qM#} z72jbYI!PjEqliVp*#*D0ByQew!U_l=(fBYL)9Lp}O|;ji8~ZuFvgddmykZT!#7Cjt zRE8_|l^N(0bi(xdPCpw>?<08j3_tfQ&8sMwV*wI}#H+LD|Q zc;fz`QaSbh{!Txiy9cW1XB6@&5PoX%#Qo=+gWN)bzB#+j z8OB2B^NVpAdg)>~gqF|)GW#SZ!CrfQZ2@fbe0U0T$mQUFOlKdNj)~Y*yo5!Ve23wr zEslqMAd{J=sjH1Wl}W$?+zuVZ% zl-Ya|`blZQfOfT?gy3|P+B-@SGU|8Kh0G=zaC+zp0pqyv3oq|LGOsfHjeB@IZlX+O zB)Q?Ij~wH9E{8(y?}1oDYGyLu!hBY~c&1_Da7h+Jjn2tE`cPLMWi2av-?F@AXPJtb zznS+~x(bCj-z4E6k7FK}iB`XhT5goOJ+@i&&8+3r^cy#6XNZw{b8YwsPUAG@u&YRj z-9e8m&Rb>|^Tx`&-+rNxU*Z#Az(f8jAR{dt&3W(MV4u+nzL`QZ%{zTNm=HsaZq}Ls z%-}!aAa8@;&MW_w|5!B=YOC@2_2QXJt30#5l;7hfEiCqjK9WSneXi*vZ`domXC5)p zmr$sCFqQj27HI@`UjhCC9enakykWz67W^~lOAw}Nu)|2^9pk5yZ!{Fd0n>)_%}(4e z5zr_$p_Vq~X)kAsRpzNCoF{kf6M4_%v*o9)xIQ}7N#T#B7+#Y^Xiqz#U(91ZaF{)7 zdhWf>ta(4Us~7SOG~b>Z>vvD8mG}4P=HL=DIk)&I-eE zU4_Vc^!ap3IF7RfZJ0A2MspB7N1v?UWIep4R=8b0Sjv)L_{=%=0v@JooR_}vc`7rR zJI1GL#*9K{O7Mzo%2TES>F{BcV1-$NP908X##Ma*G*uVVsJ!^l+Mye6VNdUaIS}euvc{mu0{|nSEyZ?jWn@#fDwBM`bKr!RX^~M9*0i8l_&26r>F0nSfbH{ zpW@FS&wHc>dz~o$m1ADijlKP8-DimKBlVZ@ocOsf!(c9H( z#2I*g4ts6wvSXGj!7)Jd**_>xQ7i7#9vUHa!^f-_TGC#c8xOym{!I8autfq5yZL0r zXx>TWG_js0m`R)_7I2!lz&yl*-)08ic?8PoA44Y;#2zRMGa=qwgH`RtZMQ(`N=~MN ztuidbCHCuDLuZtGxYNyfVuad5sn4hHL1*wId`^RyNfxI+Q-w~h;^NN3Y_31N&_^iY zy*ST=;^qH=YyB7d2pfLxMr45x>C@niSp&7Y7uRlSdTr`!4xnAIGv+zD8%oe80>(?JDn$gCO*DR{Qe&d^PqCe z>^OGtDf{yVXa?P<9UA#UTpr1+F1>i4+sG|HCx?57Dcl=&Gz!_Mdazf{(u~~>?XDsF z$wl@HsMPaZTRiVv1DsaJ8GifWxX342ccIpVq8wa>qv>a#jOX*Ogh_qT*p=1C-{0AS zDS?su@VWjDYxxsaR0mGCeum9-omEEB_-E|GJf;zQxwd#c=d!}x7blYx3C3agkNyX% zy}UNjaoHK|9)zE>u!kj+j;J4pknJU^4G8SGv~RQ!Wvk0;~s?P+;u83-YKgIE!2t)G8V*H)UT zNK@L_w>vVqV%=9g&4Pw_-?@jmEY7>IH|DA%=rBBugSRxk%D40q-oaOi4;?QCZA~=j z&VwxwL}v36s?iFrI0uf^E<8PH`E5EvF$*BAzn@io8Q#{(vF;;^@B&r(Y=3arbRe(FO5l?9}YH@xPqYylmC749bkc(O~*k04k ze3jY2H%)Z5b{%oc-UGgvkd{IBye+x+);OCx3eeeH7#Ddbe8m6cO7bo#92a+1aW^TJ z=eSx6z`NLhbG96l!t^+?-f(v%!$-}HemENCl3p%Y2Wf?lr2VTxN^Zz^K97Br&UP6; z>mu&;omv9ldOi1UkJ0xaXm04>;QPKs|UZno0TU>ElZE%S*wJO@>+_anW8%l zwu|@;-lEAigNgkEE&dpskNNz!hX3^dw|*29kiC{naJ0ALB%LV!qOa8`ZzHGS#7nz| z{)55xp}4pcoqBgm&tY%YpufS{!@q`<3Xb#D;QISqU7W=om0{S%sxy^y(7}6KZ_Blz z&qSkWj1)t}OHf@Z2qs9E`%&sAp%D+}-zvB(@0h|=L#+r>1rH6~oMmNLhS0{r?|dV@Sv*f&oADG+LZRQTURMMq z7J9M6x|k%xLb?qvh#f>H8TENM$jjkv4nnOq(bQ5{XpFym4|BJIDB17uQXQ4@%ZGT6 zKPCZKLh-0))Z_L&+Cj%HXMnqiXN32QuWN8hh$*~$c-hcpkXF`sD|<4ySI}KLKR6{Wf?YjG*OpRs%ctC%@v;jcQ&iawgZ zpb2eKJyFQlL(3GDTgrZQvwc4)m78dkB_X_o1kDa^9-0yw2_gKScerpv~C*LBC7HooKIF0adIx0*c@~l(xRX!k9qukd8^t+D zV{6sD$}L-<0M55ySpf)LA0W+a`p3FZmrYOKA#@XKD{e0Icio~%YDb0qVq zb#%wpg?3|LZt;r=WPr2+Kid_&J%wxmOlIQMha`l8osC@!+!MdW0`)NxuT!vtJdmE4^ zy2!q{I?q8SOE=34ODyEVW_SrlOF86g?4WDf@+z6s%yx%X!O_9F%VqWS_1c3D1_k)W zdED;RbQPC?92}_n@KU$6uI1X%&DECMzr5Att@U=$vS4Yz5tF z44kP)sB@uD&eVUP;|z1q!5**giZ2_4 zF}v%4W2)BDUKFxmTi$br;cm2$VC$pKCt8}LS~g{s9Rcm+B1xSpylK8Mc|8Yh zHzbAf89VYfd?SarnLX@evyLgO6NSEl_ymPI47KEhb+WCG(jPYbTvB-@anRc+C#&MQ z>1yQs!5nfePx%T~nPfQvvS1vadnCO})u8H>!39vAhUgK-NSxe<@r-w1A5j=TcN9L~ zrl`X!Ayd1VKp&#bYcQ0X?kLn_EpDz~gPrUeX73@^N7i^0i>vBwdzMrOeMOJg+u5yi zO~Th|w*OW>vclxHHkDUE4lYcG<~vJGCh$?r1#+17(7pYQol9GY0KeHmorOxf8HM05 zyT~NHoqhjQTvb{59X@h)x`UVUy?Fv_&>o>1>6JKXI?sO=5+tE&9(!A!Ju|b|x}L4B zvd#o;GE@54?d$|Tzsy*q@0HKNH6wIQ{IB!<-7QM+1B8TClem{CxJ9crUIpLM& zeBYei%}P2@EbRTZ@+)+~#oLU`d3)CV<+x2=3e#XMq?eE4v>8o<YX8>^Fnr^Sk7QY%Z5swfO@rxyLu5*_gyH(=?r^eWtYMA@SB#KThI+| z2UA3LB zw6XSPFx@K9v(<{$jR)Lqtxzn}TUw%0=j1$>g;a1g_EJmWxTt6u2id!i<&@r+|Aw=} z-$Kt&I{tz_FdQBD0+I|JI6d~lfv}Ww`%lYq-gqYFbF<0M^hC87PDglp#}H>}*H%YW zExrA*a@2ML*TDy=0DhmPtSyCbyu9Km+QWYS5c<&zTw_tV91r6(Y>HN#1Ja73v!kgL zfl19u+Dlv|(7i-pib3610UmI53Vt8Bs_Q^%jbW$>L#{fa4GjCVhl z)WQebTkA6v!<-~i7m-7EG8@>-YBrR8bPv+7bJ1#Fa$>1R7Wgexmn9^D`{HBl1Dkmk zO3_WuQw88$93~Un29H-!cAkZemq{=Lz~5?xR(A*INvxDdc3M-cw7)Z#eM>5|f|jJN zpyy~D?AFa>k!7(gpZqBFgJ?)fKI1~p5S#J%yvH$E0|ns<=f+-~p-XUP4}(q~iAvsv zzhyrz_B^Q!PdjeNS7fjs8hYS;*$NpykcO>ceEN)VK91mmIB0taTc`)_k7V|emEm_5 zf{ornnjjwI3>k_}yboSpSK}S%kq=QX{4JJEA=_ML9?&E(4=VLPIJM7ka(+i44GpYB zGJgx~)Pj8fckz?1fYLmj{P{l46-M|v1Ie!a6prGc@5~Offo-gENDbEPjs<9?4&@{H zpma1jmSb&QZ+XNHzBBBD9JJcmXl%`=zs`LXf@(I4R=prRy|-XuZ$c~Dh*ot8^+Leu z+no%0dYo6wm{YYRK~NLQNmtgsQ%py)pyDt6 zzJ?uEQ0Qh^Zhpf%Y=ZF@=a$EKnbV`xmSYmL9;bdNypN;!O2jTkI zNB$qC-ZDC>Y|sD3Ny@8^mRH5F0D;CWxVr>`Yp~!JXdHsO6I>G#+=9CX_r@h?aCi8B zs^+d|J=3f2+<7x6b!6}T`zrW_0>*Gg6VBH!kvjPgZp{g#oV+q_Gxdg-6;TG9C)eqV ztf-UGpSY|yVEV_A-nUBFPveG}Z1leDW;#Pl{V7)R9js;#xt~t3($VPGf5HgNN7LB` z%&aB|Z8YfJBry610WzA>waoLC`Sn@As9$LZGD)YP;?|(e7=c&PgbVz*u$;#5y>hzJ zgha7V>INmwKfR8|jdqZyuFzMTV0eVCa2bl$nYd#PfEfHC!Ke+-`zDDdebKX)r#mwb z2yqECtuf&B2WikO36^^$FoYE-T~i&8a1-2A<6&m+8&;EP>1544Vp&Qm{vc^SC+z&F z5iX-4?*undpJuHAmQ}Rg|Hgegn7z~sFOo?&l)S7Yx&|^(5?0}tAAk*L1yblsC#TW` z#Iz`_k^{(Zz8By{+qnz;ribP%?v*WQD}5?%6=rBWsajdgXThlBg{CMnhQSAaQ|sDJ zs3VoSWKL8gbD|4bvoaIT@j4iFp}-7sbbKi*dHB`YP;vWG zR@^WYJ}q-vfFAcm66|18a<7~)#a2+W2Kry5C3oV~`OLJ#JQ2@kC9x=)8}csE)4N*B+{p z|F8wjuoJ9oUiSQOIQb@Y+pRbBrmy~!X_t9AN`&fg6W!n@KB>KIpVdUX&rxW3dy}iQ zm2+H9Q#s=V!)0=UXX&!)MuN+%gJpaJMp&Diku&_tE?lpmA0c<~49f7=j6lKuA|Nj- z&QVgOdifRX+ga^>Z=HigtKl#sIbcRsScZ{q*%hx=5^19IY)kYsX4hFpCd+WfO z@IA00ne--b;?LUAG_`Nkx1go`7-!7NaH01thlJJSdLD(3YY9p`)>>2zQ0{}(JrllJ z+?J*&dH0hMTZ6QPKe+v#gAp6J_q8>@(GPd0i{S^~)>gi-c$_Qac@By6HNPa=rVhyI zjlkUO2sdEj6X`VEtSjqB$jjiA-DB#>geB6wbf1;>t6YNozBv1ToGt32H3^gQh>=1Y zGObRbW2%B5@g6AIdiK}#u#tCg;uX+5WOwbz^>g5wxdcPApWmEDqS&v1Ah^1Cp1J0K z2`~L<;c2IPrHg|Xxo#Li55rg9xxSVipW7 zV0fg%u*N&_Di0vN?}TZRxdQ#2FNKpRseRdf<;nV3jqYMI4VvM2)MTjuj-8Q~MDu-S z#yI0SW{3qiN6@0P$5+R>k_5w>kA$TQ`~}Nl$b8y^#jLF-QFB{4*-a#U!;Ti_K7Nhk zWQg74T&wcSyK%C*Yn}&gR}E!rm|Q{WO4FLtp3galdw&;hX1W|thvWv~CVPB!^8!=4 zu`ul`KbQ?(p`85%8d?pF%QkY~>uN&z{yw9)cnCuNniHJ^)V?R#g}33J2QpWbBh5K4 zsh-vFY7aLSG^LR)Q<{m|=Z;H~=E{4Ox3s=&w%>CWaqI)3520=7H(DPrzkVRes5!{x zUkxr5%iV8=6Sf_W&_qu28oB`z*+DyT#*1VHERUC^6{`LO5b|H>*QcRCDoGEOgA=U- zrD<*BC;E1ZffKJI%gN_X^U5}~`@>LDS9ip^_B)!`Ut3e@ZXLiJHJyyo44!>oavMb& zSni==K0&_IIS|ntI4F9c-~P+V?I2Gffiv!6vZJiKK*QW||(y937#b&%QF=kl8pB zH|7CTG;Yw9yl=Vj$sD26@GShRV(V%@{q3~4ujP=w2V_9D}7UjGaEaMmx%wmHTb*}?H zrYdXuG)pPr9q0Jjew|M|yu>|Qgku~Sb*lHFd#EdeeC`Hx>5-_66Wb#-6BC37^ry}u z9X4F<>UX3^J~b9l0fj7{DBj2{X1FR zuG04*35QYF7Di$80w3xFHM`AiALY2=tm!`KIS~B9+sLzzq?1gJ!?ro#gi}znZh@IB zgwF0R8rn7H++?eHa4*#d7hVQJo`;;=tFVmgNe12kR&q)ImanUxVY1;iZ~1r}m|bXD zY(jd~0OsaxylqbDrF4V#g=MHZKcHsr?!4qGg_8PE$laip-W~2rsQi}NyMvK8Vb5tH zFGB5Rlor0=28RpX_U6+z+7wWC{x2D*x*aKh&j*^r8An3o)Y$3hC$Qy%`E}~a20#$2X zI(YiZ>qzt~DJ~_i_Fs1W{;WTVv}e9IZU!N*NQ2fE35A=S7M1^GTyRPT*WQ!P_G z9oz-c5G|S~4K5LSEBE%Wmmy_> zk9Zq{k;j9hl(dKQ_E%DSlkoKc75hT4y9t68AAu9i;XpHPZmyDoBV&qb9N8aJ`S0h* z-Va5Ax|(*A=CD8^!fK%~C{b%tZEniTXy|Q+rYeR8%j3?h?wX!M-YUTdLw1A-q>~4S z=Z#!G%<%t9C;uK27~F`Q?D;ee=5fgOEH;ZZ7hMT6VeATnp$fFL6ccV(`f?V!Y94K_ zX%^TQx1(yGh;yJb8vZ`qi6y2}^cgz&s}`6)FhMRQpSCM*+#%vOaS1;3A2hkH!67)y zHs8M7ah+z*Hl90PDP%_Q3~zvEx~ra3a6GdewjNX;DjH_|A!w3{i#vrp!ZAy05c4@O zCSUNx^hJ@E182iQaN0%iN3(egQqXt5CAF?P{K09Ge!7^`SaHYk7mPvOy8^!C9p21o zN;{f0+uKIjr;)&6bjNtqpkYBHJqCB8v!)}r{g?HUdP(^%7h@IND#|q3=AcDe!Kq#s zBr^f!X(o`4v82w0k$v=w@BJSCynutX@`ZFGjpaW-dVUa3=)dOY<~EiKmIjNpj5p<}oK8B<#1lMkE7AE0c!dhs4mxuUxZemx1~{rR3m9A zjux`5#)if~c=9-sKy-$5{c)!C`6S}bMBBX$&hDE&6b^GbxM?VNC!HqWW$?1o;Rsi< z_MbuDA0fSA9ZI9y@u5{`uYr#yz&*^J?5yqhY1>ay^(Y!?#(->OM;CE~FK-cA+wFY$ zH;jGJ<97bO#RtKYgy=gqu1=b8!gXseLd7i`jSQn}Wbr zs&Vod1Ur8X! z|3UbP*WBmYpgX&{YGV*&gMZ(>Pb0`{l6l>_aww3Ou;+Wg&X4KyaoTy0y80U#5Wi^7 z&I@|m1$V(+yklEwuRg&E-)&#)DC_KMm+)s#Q^tYgEfO!0MA3$1tq3@2Eu6f79wwi^ zvD<{kxi9G_znI#R$yXfAd80Fmz+U8IEC)S*25#Gmo~@T8`K>_jH5l%4AlP|4>hiUm zvC~oewWgQEC}&X&tcQJV>GmOxqqIA^P@jF5v{F7X3O@8Xe!)~y?Gkv}2?h_2x!TMc zi)iD?qC3s3-VMAwgsCGN=e{i3oM>Q+pidi$((JXi0H=Tp;8zP#w~seur`=X%l_&*w zGuYw~9?&ZrPyWikB*xyf*05h=x4Dnj^k3GOaVU)Mpm~e~(W%Tn>oG3nJ=?-b?;8I< zgLQXNqqN5#m=$E}F#gD;{IeX)IF%&958%dCP-Y(0YB?1j(B_9fP4s;U@dgJdVcG>$wyr+E-({MtD6${Kd#RJ_X_mvw14 zb<1+)tDxkQn6;wm-mA_jyFSR~V67w1H&Cc~t>54Mb7A4KFfxolefyTBo z=Z|Y7yiLGGwgNOI#I}(&=8Ccyr_x&H>f1PUd*CBb$ntw{XoN?%F)qnLoG*8CzRd-C zyqOuZ708mEDdT(KCz4MxX)Mef)xZ%JFy9C$q1Vyuh?^fA=LXEhdvu;2wDsMXst@q% zYlwEqEazu0OtMDUW`da)k&8%?Xh24yL9m*8nRam3=NNvG7xxte-i1Rn21WZd&h#;O zgoXd5ldlIcOhgTK)Spi7MFl(_eM}Z6kz~%FBS7wl;mn?8D2lqfJG@OQ+OOPvd8fo( zoOo|4#jSU&Wl?_J;C%BD#bGha5T@#2Q*Y+lQZO{R$c~Lb`8J4l$=j&9TJkGDgOMiF zI5iNwx-Ga_ELymEV0Y=Ld#mEqJq(`EkraqRx^=n&r0i8TJTr{(YukI1WBCvjQa>_4 zdb8@^Q-^?_E@G~mLOc9+O9p)NSTcJ(c!Qtlo1^w@2RAg0RQCH!Gttb|&+ukX<+?Qj zi;@yK8FC<6p*q`77k34eFOO+_NJMqE3`AiQo>*U}XGgTIPr<2%fga>Wb@?mc z4QN6-ILhAu2RKU?noZA>gy7S*zea1hMN2QGA32ZW%TF*?1iM~>i_isnd|$jSJ(i28 zkLc$PlCw!ah5SMT%SiKXbT1A3nYq2myJ-tYGtl4ZIRFJC$h=6HMHTX6HkU{^^b zgYWWV8rkU?Z3Du38`WPYe9|&c>xs4_n8s*Se_P=V0yr7Ppa8pvwtcZUA2jJ5nNu$1 zE!k4nnJC>fz0JfeJ(aVd#w$ z_zP|aWFaY`2UybUz!H3sPc%NoV<8le)%DNlSIlj^W}JXR5UPx`b;dKY953$&9VfEF;q6noT#A)#VbCe16Sia$P!tqkJIqA%Tv&E}&SA$O35t zisozeyajVn865322_T*5M{vU~<-}cN!`a%>kOkJfnaMz#@mNlw1v!J3A{C&PnkKKJ z|6vxXsnd1FDQ=cDfAs!6#p=q7D3n$S)93>t(N-3(YmnTa7 z;euCLj+y_`9W#amHM?ODdj5JOCAZLiWIe6H%CZSvV;-J(DhPc$^wjyuKe3Vn62@Q9 z2o7N--U2*!7mee)(t@FJ^#yI5y8zXqVJy# zu9lg^{87C5c2a{cgKunuFFgTU`d6Q9Xim4~R@VEHmcN$&Xe78KS(IRP8a=Wt#5QQ% zcA~P$W9r5!COhcm3EWWoK`$S&g8c(>ydW?dH^FWAq5fdE`N&=g05#8svfYK!xDD*h zu7K|WrTHq-c=CPGmj8pcJOq7pG-sYAbX$Hlt~RwMKQ_aXChWmSW@OG?fE&6w4R;g4 za9;7-`{AU>Nxsw-P7H_m?T`Iee+GIO&2PWM)d#_l_!>=hG>T>ewRdvwTY+WnCVQy_ z8q^bkGOPYs*s^3;gT1;Iw2&?4>hDNgYC{vxeNypvk@IGxLpp)%kv?J^6U-s=Csby` zNa_`6%D$ni#=h2oon;!G7jIFrb_6Ya0CGGEq`D+bfrVcm$baSzhy=r(j_UYFKqQFX zdHf{(*>y{y4J<(ROB9(5iwt#`!d98uk^1Ai`XSc(KXMgyyF5vXXNFy2xnj;~u56m- z$1W$Jt!oN$(n|Z4y`=`)+Fh)sg=o<|2shCgjw*sXZo| za7StGgJT}nRzNS&1zp-YcG^s)U8e4wvR_%w(eQXdl9l%AO>|xfD2$Gg6lym&$B+4j zQ}Zf)CbCC9a(*(9J<=L(@?79VR(C_-Es~Z-!H?7dH!sSS%fj8n(uc4Y{5S+Ob1ivC zWm%s-YT9b=`BUj9!4~Z|bSJy_67B7kEjc*j+!E8JGPKFQlg~-p#AE*ML|EsE&I`S zav?_JC5+P1^eMe@l1v7={L-+d`pqd?B5!P@N&xEqiY1UZ(s<1GyFD757z z$pH!Glv$j#=&q;(c9Qv{rE_nRr8c`sUI{$=jDf%KIa^xgmQzPAHqHQ-}> z#2!mCrCtxRRl@ij)}SOQw!6qSY!72HNWOrJ=OCR{UC|Z~^`m zR|(v{C#b^_lmWT%?QTTXpD68-1^Oioymy)!oRuD#4DE3x7iqc*_=iXDK+xva>3VBxfmz)9n*dx*y=7d9R<2 zDrgVrwbr}~bg8&t6n~0;NZskLT5O&0%>9(Uijo-S?~XptNq!)xT~)&l6hAv?Rl1J) zB#4Z$nK%{Pn)f8>t>b(%fOoJ1Yd|0F##}mR9&@rO$NRZUqeB^U7*+iedOcU`%NQ=9 zZ2x0i4_ougyd6DK2PXO`@>fo(@wP|mT)f!PD1Tzo^Sk$wtk@7=rHMTKH#Cp@raw4@ zOv9>pXy%%0kcj_)6p|g%W;6*UNS8G>4jzbN&7{zZY87RN- zE;S^RJ|`~aOiDNy&JNoq$46T-Nsfh-P+6tTwFU0~bX3hNO-9oQ7>jsAAggXk&Kl$3 zjNYL2isLWvpsfF-d5VMJKB-Q>agLN=!ka~gq>AEtC)wyDc-K3@Otxo=9?yv?1$^y` zLh!(nC;qpP;9` zBn+Kd&d#Z#hIJAOq++fPYE}phHLLx^lDU z&jzi?O|R+`d<%OywWi{cx~hGrRmdwJfbQ%wuAKx_06ow@mPcn@3ZAGr{@{`LXTFgh zyHHvoFHsKD*IgR*({EQbFryx1r@Ga*_&NTN65K^tZ!t4dJs}bLE!pS};|>s^A1Df= zNj!U~+lsm?20d0;PCup5{59pRSO_on15R)R2$I_{0_AffR`#Ok9;<<1w_|!eLbq2t zsWfhe24wE+#Th=y`ONKgEq7D_tGhy@V+x4*J=8c=xqcuCcUigrIdC;pGCl&GE`@J) zlYW4{I)B3_*0GD^ww*>#{|voJUihpDAXydzE%Rue`Y}62(h^=6CO;ZO;$aG-qx{x@|eR8*P+sXf4-^FNJC_r8)48T4=5>g~qfeYVNZr z$V=f_zQCS2mW0cW`Y3XM+Vgwol9&FF#Ng&+(>!Ntn~&nP9rwJt`5 z$?4v!oKf#v9rg~6<<0``do*gsk-l-lKF!wDT8uBhHs`#>^#9cNHyN(y{r`_AprduG zJL=l2h82cBp?Y^Sz{D{`VY$(i=i8CaDUPc)Eqx;T9zvMekQ4g5g{@@@fD!!#n zZzhVf$?9xtvhAV0q7$6Z^M>S+p6>6?C5~S9Dj*4e6pK;-eL|A>R%i`lQrmLb91CZ% z6cqL+h-`ObQPBGT3_Hn$m}8g#OEI4o#bfyY^C4W?84=6Px8Y=KSo+=b7R)29FNOo+~`e9x^ECr)La&%?HO3`#j#h9qJh+ z3p(QoB$_r8ZwQ@*cch89!IS=F&V0|hIf0b?hNegy29Y4wonQ`jqN|TE4*(kyEQ3fV zZ$kP&4eoeX&Tp6G37lTLTAPvo&z@xF$QRvgTd2 zo>1>9@6pqD!8fZBhYBA^>HbJAx|vpjrf95pqwlT&PxO+cfg{X@dsx#R@qL%(3*U(5 zqBhywf5E5j!3N*5v?Wb#Cap>tq*gAbdtwaAmqYY77I!UlfAy>g`Woc+j&Vo0);YS^ zi`q1_yg8LJOgFpGw0GjH6@`bP3F^yOGVnL>erd?sn{Q}`pD&L=VdfFg;FczRWeO_y zzp&todG}hw-jp_PF&6+KtIPGLqPF@aU6OYw+*g$CqN9y-zbn+U#hWQ8zbDyM*@=gY zoTKs}^u6S%G^Y!!w`pjcH{v4NK+e`tuKb5@tA)W~c+T1~53V+r^`LL%qRHotc3*HtJGA!G zBvsE+mVjiu6vM^A!ddp36|8mR*lQOWb2C@BXSdx24qpXC{yQt}1MlB~|Uu1D@3o>?xFa}}NG zL1=+q$k{>3n~QUC@6>=9m2s*6WDUt`OhB1&jw|HRztyGUi|fuAq6$-PMgDhpGXHk! zUbC|f(x1@VaZi0jX?7Rq)@Rd1rp8lrw+4xi#P#R_W-H0$M?SJuam;b%b$|ZF$$A3~nNfvA>N9kU!Ljm#=lFKm1MIPfPy#$B zcO=}OPW}qb&rJ4qpKHz6J<=UF_zEVsCzdrR+k>SaxMQ>8D=2M?x8HX(b-i%u`Q^n) z&V30taYK3wH_=2`Kr(t|QuQ=U^Ur9q{0J-I)*r{U8IBfhFZf|!9CNifTht}lwJ)a{ zUpjeSPXGIK0=r;3ny0IvWS_wZbDK|_V=ckLWAZopNv-8BN-s45UOq3WPo-Q#P{ORT zcEhV$LvAW{7ni|Ddn^NRt9UutzBhC+e82&y(XT??or$w$JZG8^G&vv8mfuHJ`A(Aq z|6pBa#$DQfwlb}NFm_y63Iz0rKlXP3`F{}V~;%n_KOSg8|zJH!0Fv9le29hL1*>8kFj zw8u5mS)7ei)I^5peA62gSnD~{jR(0~Lf6%Q;BS$z5vM^y`*5Z&hZ-m^lXVHO(O zCpBL+#lUB;;}o4kd+P|gXBHarlFvO1=JqOWa!v8beit*ObUBk+${J_WIbs}JNs11G z8TssY$^Juf?Kbe6V(72#v!;$rHdO$D)B;KsxzF+8e#} zEhTXM+&F~O(LWvIe0ht>-2i9X5m(0(^Afa<<;6VU(-BHj8lwa4)9vZFqw6dA(3(~f zqd~6H;Jr(NQ(q=QaR&IwFmhj(;9+>fZ)*i7@f79NL=f4AU~{F(J*mSa>C0ZZ15VZu zjPeope=e$+zW5r3lLE1W=~-ayorb4H;#_+HHOvj#j&fU<+e+A{(TS~79!by1Ff`NU zI07fbM@|jXP`=b5CA+Nd96J5X+Kr&EE^xaf(4(46&H~!QAK-%qruRzxHA{I80tn9v zo_}K)G8*a7)t}PG8tlg7B<9vOXR(~;bQ#Y)F`72Ln`(9213YqB)swV+_$K)4q-RFb z)Vq;2y%u>0IrVX0 zen^BL%g}blw>l1f_6luJ<#1>3LyyxH?HP(*xs5Vi{R$%~SdS=USmXMk^<0TdE1S8f zX@GG*nwt*#3%qZ~XtjHT&b9)Lt(*PngL5o_)`2VnU&J&CieRW6RDN2rAU1%?_XDkJjkdQRy7G0XA2XoIGv$(qA9K#frT!hC-u3n2`x;c!;im*55y z;2?eJCpAE+hk;IM!hK9={?wMf2rTdZ46PqN{?`)W)XZ1p8d!lNhhm!6f=8e zc9n`Wsr3gbImlBDhm+Y1D^d$ZwTz}cEBW9)U3(R>=~uuMS^X;CY-nBgpe&!Sb)Y@0 z&cw6W&<>pRA)U28WqEZPEIZJ`^9UZi3z*e6>4Er42o!7}Wcc9i(H7uQ zccaMKVU8zhs}y?AXq4qo)BsyAwSbaCejsMx$;@Y|MtkW-?tB@TnTK#Ar^!G_N8Rk! zoPl#J%y+(ncPt8Y*uk&P#_yN;OKQOwtc90ygQ9H&wexBEgS82u^U3H<-|7<#tzjcy zke57;-qi9mmqu~*`<(IO$*8uvEn!Pkqmm%3Czk;2D)7&btmSQB z0w3~zjfM%SLgG+C-u$w>gZ;Vh7r}|Evh(=#)nhn$)P#%oaY6(1UNTkVacrB-H%NY& z2piW)8ZWQroo|QAay(OWS*Zp}lY!_=E`b+Bl7MjstZKPV(aqyLaSAj}_=R&J z1wLQ|Z~t)ku@!vl8E~&-H7(m}erI0>x&OedXZ5?=v^}`a_SyWwSeDW5<6{{z<0c7 zFVVDHU|^fE2kar=tt<&Kw_u|d(rP$?_MH`ArSA=M!D;p8V|?wc*y9S4RNaC-?zeTB zJ*RDz+TZV0tSvS})pd|gDPKPJMRe^m(G&G29eXaSl1H4~>T9(43f97UwPa5(%r0LD z&r~Dc^hG4Hd?)K?sOA{z?jbNTbwTdh;ToNZcj}RG8uvY?<%VT5Na;ARgx%ykb+nlr z?Z8Wp&@DAbS}rEhqnF)M5l_Jt{J?{G^XkzcSyy+9{W@5C1E*pgJc`fp?5*H@GYI!w ze;ifwNME_j`dX4TaS!iXTQIylJaZ@NQ~H@mItn-4H7(=5+vxSn;8guYR@ExjlePrM zUA*9h)J$OX-$?Y!LxbmRX4br>!5~D%3~N!q(9t$;l!P$KE13ckUZUqwfBUU$Pfj7(TCT9j5th*3$Mo z&hGX<){SaEn$((+W;j~d%^XwEJQ0s-5vI4ChLPy%XP_ZI$!Rq&r`layr5T#?VBP{f z3J?!ib$!<2Rho+$qqY^-&W`p94jIKsC$d!+pgMSLnq{s_uG(c`FPz9ya!h})((JPD za%R|vlHU1Dxqzo2O?*yDYzvgV&tan%(ihza{Y7UOl5yap=fGpjvG!aicV!CK>wupu z2F7(9nxB&-p@gA|*~zur>(1-Sp*Sm!XT2Gjvdfv~eXM^ce6k^uQx=p;Y8<-u5{{~_ znPjgVw+>S4DOKgF@WJDR!6IW+>7txDlu1Do~6|s>W8?e#P<1 zRoIzII=I&Q1c&e;G!Wl~2wYUV;U#;cIBIA-hIW{HNFsI$)3R1~6)#{c3Gl_VA-suU zoV%)_^_t9C;v)%`6x6| zmvh}4%+SSXH{FibuZ4cUJ~xP_j2<}*^=WPMd(IS*LT2$2UWR1(Ajt&ZtmW)892T-y z7PxHA6ni7kgKx?sfA&dXxVe*{)V)c@uS4=qeXz++bPuhdQ!O)d^c0kArO@}A$$trC zCn%t60B^V%ZCgPm?Q1-5Uq1Of{3G*Gxt=liKy9#(b9^)ibxEa}+S$6q_S9a=dC}Fv z8|QvTHo9PcK!52BQWX=W^Gvc0h54NAyP~SB4o2J#1Yt5L{cZgWeM21i8KBdf`J!j@ zZxV{Kd+6y)GiUE3jXs71?;>ETRy4OR^D5r;&nW8}pmY8zy&|{um#VY1v+r<-t|{(< zK^;8%T_tIDOR{ycMykchRg6Vd{D4V%8o3`m%y&TszZxgg8F>Z_BNxwLi#}f8idFa@ zaPa~lHVw(cS%e!n(9jt4_A4E^$2i3$(K551+3_lzL>>|W4v--@os6a9Bs>*!Omp6L zb@1qdb9uLthOpJq4|Qb@+O9IePZh^Uc7^1V**K;9lX^AIWCNpa0Y1DBzkfC4aPRn< z4}lXM;HocJRZ8%iSArE6C!OM{u|894Ve>Yy+LJU2D&k>r8tqDTluuw8h7<@|>M^-jIcqs|_PZdJr%9oBhl)9lrm^C*%L(lHA?CfNW_UOg@fLVFckP4M z9S*9|37u&_l9JbxN}&fc9tk=gN_O=#*pPGPhL-E7DGlN=II!|^9>uKMtVL{X?eUH) z&VSs?Jxzl0g$4yr@JgPkt|~Z6_Sdc< z8e~XlcY#=9Eg~g4obMuzzw7}xU4InSF7pJs%wjBW$b=Wfz2Y!(k`2mF<%RkZr&>Kn zFXuVeKb}PIpx_;0qeAWnRrH>7_oWx$mVK=)#ky8K22z_Fr1l&QvMb0wT4O1IvOm_W zm@k6+w?G?`odlXYsM~LHpTDEttA^%xJty|^^mjg^L+=1N;YT>Re-Tr-=i!Q0&1!wa zX`-B?vvZ;AgS)-=bJO5nsa-xf<+rerW^R z{)<9S8YK^cKSyu^Im^2|&pZ^Qd;l2k67vc3E3;^+OH1ohl>7;33;Kwk#W?h%TjX|V zdhV#l$X;1t-{`pIG`I_UmUw>$%?sHOmOboCaL=G8o^kG4poSOiyKEP%PgR3j2dDZy zsfM(NE1wfu3Qx(M$&adfI;l1yj>@BC>&znQVl0?wGAjFz;N$(kW;27)Z(}E&K=#5^ z9Pk@(fs4ukWeI7av9{s#jU0Aa zy-(AnSM*q(7D}T>0&3Hy{7=H#$~^kkp@x zY??oG`}}9_h{~alpd%f^`!NQEfWb4^IQ+yX7sM#bO9i^WzlG? z*5B6WMc04MP>Adc8DE8JPBceYj=@m;Le(`~sv+lATxv0E1$e1z4#~CD{o0)$=RkcD zlOL1OeSxepg{(qz^mb*;8%_D>NG^kSF^2A?ZTc=?$)7X&rT)H(jDT+WCT% zp(u2HKucKm#fr%IB2~Wor`Is|B4qYw~ z_mn%1ewG=Hjh-rP)^DEiegLE%w%Uetycn`D~J#f#>1fRN& zdb=Vl!DVKriFm>L;O6K>_R36CIBQckbgb8z-&&D8R8^^_wnxGJ*xu8*#rev<*w(;m z2QkdaBwLYF?J;oT9w6l5XxIZlsf~1p=GCXcujk=ZvjOJ6Hm6$)Zuy@$By(t;=yBSB z6`Z8iDhiA+Cmh9V&a*G@X~>XIdA8UJI{G^f+Io+25H zq26x<^ZkT0y-7F~%h9&uB6B8}eh+7-FQ5T!`JK;k`%eWQXbgT>4!3A6(A&YBsV}3n ziR5&73xu8?Ku#cm|OV$^DDh)S&IpMExRXize!#VUrwcF;|@7hb+UaOmU=Cf&i zI6_BnSyG11;nwJHyaYnNgH-nYoMm5wgVcnPI6)eF2j&N}<|i}EBeEnvqOA%-?c1MI z{tJ?FhoJrNIaOVp1H+4J9Xr=F|uCs>N+uDz!w<)jWl8cex z*@X%IzB!nb>{D><187%kq(6_Y_9rLT+91Vy_?4BI)T7!;+&ZJLmAtzbG>2f&D!Cvu)ct^U2Ke@PdlkJHu+A5**IziXQ zYjC5gmWjM?Mp{#M@upA4nLe6R>w3=be^E#Ggp2q^7V{EN!S<*atAkE9M`t?)1ouIp z!i>Fybn>#?r~gC9hjGf>U}yz9vyG1Sa5OK6h55{|ljVgZZk4mmCJ%o**hOz?6z7OD z__0cnGjx=8ub$*!RM4k_kY7P%WyBfYABEG$!2L|>Ets2w!NvnXt5s0ETBPYNXRefZ z2UcsoYnpP#&qa!7AEkR&FP*n6EW!=udZf8{f9?bn!}Y^1hMLDy+A zwjt$6CVwO|=_duWX-uqcP>WfhGYWaVJHU(vlMUU8e+PooC!=o6O#03Mvhp>4O{War z@LBsWD^H@nCcAGc_dWvW-ci=v-Xz2SD=&qWTLv?6R$fkbXbP$D?_iue;EZ|*ZZHXl zjxQg)yEcb*H3<1vd;?uj6TU$+JcT5N`e=B|@NaFfv(X^*|DmR>%~y~PKQIOLRb%a0 z-h5v^xG#rd49HD3TFV!J7FG~T&<4{1Md@JcQ)L;xiBaMlGzK?mF0F!^_#l~WJz%4% z>5lTHy=HYOthvu~t<8IODPWPmNwFyCxQBlWp{nixZnhi5E`ld>9Db}nYfo{!LlIrOJ%B(-;+X*zzvGD3iuMba@zk5L<153$bmfc5T+l6nsgM6anWy1MV+MH@*9UIPbs z2BuE{As-Z&7nFEA2^hY7a2x1+7I0!8MqQC7u?TiVKM6B z{DH6FMMj|3j{u|gDcCdd`-8x0JMjga0l8}in)NxbK36xxispc+&&8xS$WRy!cZ#XM zxeBN4SHey4g_MoFqk7h}$`o9fol%j`v80+aI2*@u=QDBVcjG@#))pmasUJyRr$ESy z;+ohC6BP|E?fxG^E|R`e#gETl2@pwvN(8rS!n!Dcq-Z(!6hccp*#Fx%ng*F`p<{j{ zJQ2V8uin?1j@n_cG(en)n)d`dYbCr3dkrQO^e5n*Q(*@lpcM`Ee{WSmD9?~K;>%tM z=iZBO1VOMQjX`XE%!n6Oa67wBYt)xPU>iPmpbXD_iUC(O&wY%!DK5o7!gKMPWP*pE zjIwGsPV8ymC8_MKR&z7X6gQdE$Kuawj!UUIYt2G-()YMg+5~#xq&D+~wWF)GFy4uR ze02@rMdk*a2>6L}U^Hr5C;XW&6Mu{LAJhP}(dkzhqCgWaqiJo=q@`iH6WHZvsGD)- zJtI|Z53a!b^hcG2o7fE#8HHCUJ9$H2=^U4}sjS}yO&WVkS+Ym2;2IeNL(mWvdjsD8 z-mH1MU?gok_2sk?6a&%zq-jPENMqd{-C%tfXvSbti{HUb#93+x1@Na9lN<2Gy~Kwa z!bcl%<D1Pk##s+XW5vFPMOhVDcl$JsOUZ zd@=9BqX08GV`JdMOx*XKurg!OuaD%souseJ8FP)XB`)Ecq}~i>zN&@-VmL0Xihhi^ z61z+UYTBM8Wu|kE?En*MGV~<Y{@vj5?(fN}Ta@8s4FUqXvyXoLE8G`G%8CJa2s; zajdYGKQhG4<(RuwLx2zliX7LZw8V_7V`T`gOF!p&3z6+{)rtf7d-e- z_@F0&`S?DL^Tv(EBN?lEuN%rbdkh`5;!jtr3|e}h{F4K;Q2bKbTHlj@VM58g1ts$Z zR8?+EOHj%e%!Ttv9q7)lZ=rjOiZ`6(nHlJZHN5+YxKdieycdLdE=Z4PU6`oJpz|4| zYjwjt7(jRYNf@Eceg?b?{Qo9nG0D~9rdiwAcUXI=`8ZQrrBFI& zV&H*a^3BgC->e#3Y(e~aC3F{13ENq9Ca}+{q;2hoZ5|6M9}6cvEN~`#(S^Vt=(yXW zD}Jk~MV7Zu#r=ci7ZLWqDcY;GIAwH}G)tl|O6(@Z!bojVbD?m|W4os=L|rvl8pBSr zk5;P+?6S{jomoXXXgunJ*&x&h@xD6nYt2RbP*{@_75No*)7>b^kCSioDNrSIrZ4J~ zcbYP+?_W7t+$7`a9=cjBx~sY*?rb7Y)XOS+Q#=kU^Iox$JJZFn%hr&S-F5jEQ}Y*Q z=H_HgrQ^|C#(du2@KPV6f6v*@4m;EvUClGiR$LKL^oIuH+|q!N+c{5GXX7nc!PB6Dk3d2lx-*=YO5?%3!f%|+d7~YxKs&gy5oiN;!@vo!SIe|7 zw3V4E-TFDG&U^~;bEH!IHErOR%Vak1WR_gaB>$KO&w2I)=UMWxRqH+FvV07T^o>wh z=*;QPKo7`ml$%G%Wj)Lc_Z*I=gf1Ozd^bNr{tkrv5c}vMSjYRY?JiFHLs44daIUP$n2mB!QI13*XCZ#fd+XFTI#VOsrB7=0DLE?x^7E>&R)}K)+TaIKg`KimgS{ z=d}C_J5rJC&|+ zuARfsA22UUBd==)$tRVax9y|gBn#t*4wmakL&dG| zf*oN+Bk_n9fs<}Rmggj%zysc;XcF?@!@Q*OOBaD9B#|R~4_2T!YtvReP4h4Lm-4LF5D*9HVc!J#CVYt7?s*9|rZFVrrr>^1N6t@a?(%9}s@pK1-_^0HO8j9<| zPTE^;m>Yr6wS}9UXv_ygHVjq38~tJO4tnt>l&3?qD40!@ejpx+E2z4vgPOcDRPv+q z6UZ4F3j>&FDUY&qnb?!ui@ap^RzcY~k8iCs-KE`w`g#7kraQwOFKkVSi42l?QJa<`2V;zJJ6L5H=_5x# zss@?E{W-l-!{PWG0941o8`8$-cOWin@ULAvpLzn$Lp34}Y+GyhgjK=gW)&Bi+Vo zUKND=Icl=qmT+Mm+V%77<;CPjpcVT$M{Thkw}0bZ@8jO#sTt%6iOJPF^j>h~ptGLt zZl~+2V-u?01=e+7cYows@-iu#)QRrS{=#?597{RN9rGgI!ypn*u9)_aq?80wy_KE& zImlR9{<=M!A39nNTk;C41P2IZdD3NGJ}oG%pQyjj$88Z_R`7cdVMeFSLn50X_L zfmFYywa>~)I1Y65v#BO|TG=hJXsDxv8))YKCc{US z^lbK44qhJo#XHFJ&Nbdy$?@BE!g^Fa$+Zn!dkTzj8{q`__&IY^GHr(O#+`(J`G*tl z88j^O45M(SjON{64MP3Q;59ab`TWjao??=C`Z+8UEP}9*vrM|UNa{*suB3)pOWFF` zhdItVOS#8+l%QonzdQrnnOun^9p$4t^rxc54_^~S@l&Azd~jY%3X1)0?DtoA(>>r= zb5L@Jp}zYDGJS`y{RJ*GCp*D7lGL)nnyoiV{G~6r1Fy}4KnoVqT>BpP>kyEtCNQug z(9l12Gy)?I@vin}xO?)oud~OIs#qMXwh~Ie72;>1CP@UjNc0SZi`Q}1h~UbDQByxf zF+PIE%sTo~w1N~Tb*}}A+tvIf7XGfy__BJUp{{E>$oqc<&&UtDvCE2IQBzKqM}gMN zgZqACZ{b|vk~}FM#XZg`k#&-2?XPxMdXhb{6DBlD*hE_NH2g{(V4r%EE;S28;TGt4 zEfnNWbZMk~Ed{Aw20C(xb^bRPNq^D8^LIY5*CvxRX zV23lnG%BIxcAz}8lZ;T7iE9|y$WO_57>9}#6)qU%ViLwu;r-8}qSgp|$v7%0sj^X# zNtmfj!q^i>1617Ao%igc!HG-YR1xLUQY`Ds6MQmjm?(SEJkfxut||QQAolk|oUlsj zG`hQ}wv)iA=P@ZRXKuKRf;yCacZ=>1db+K+@)A(dFC`^-lc^FOtx=Zzq)x38`}6j< zQ<|$It*2~)V}jG`nna?}DeG)9^@holr8VsCUZEfFIoU+)ZLQ#bqnN7N=zo#EUYjeQ zLM`1B?_(sBeI5{{qUirRp>p0qLV97cId17n@D{kp8glan7BgKZz0zRWi>}TkeiYA2 zXXI1L9W^gJ^aEJQoA$mmUwowV=Be}x{d!AML|@W*u#EMj8^60TIi~e^(qp*S|7qud z6o-SE`m)JSajH9s*ZUsbGcK|ghv5X(k+^dZ9sgo*y2af8-Ke|1;y*40Pq>)8uPRc6 z>_Si4*Sg(ibDVZW*l)4Ab%zb=3;(teZ(>oBC$5+Z!%BST9lDDTD}(3iM0FCUEv3!k z&oi8guBRVJb#HXGKGnw|%}Z21ZSdfJ(Kh8hEJX5}4o8LLixDnFJ!h<}Ab!Z2I|I&*u|5q7W%Xy?1>zoVW}b$d{h*g=ri zqS>s^L>q$M&;p|3BH6P#*vf3pQB5Z9zydlHqy3K1!}?lq(}T%7*h$ibmGjkDv=_mo zM29MM)j`&D+gSTo>n?I@d(t>D1Rr{uzd>^a+*=gryu&aCJ@Gt}gZ6O81yIAOXtncc zvZ6P-$`o_NpH6<0Y;0Lm7R+D+zVmXti{G^ELF$_5AE0A4viH^{sdyWBm4_Yos9$|? zhCaPk*ym@EWTq%t=m6Y{-;(3Bgi~x6l%36CfkvTjxrAb{gytK+c41&|v~-bZ zyz=mG2{hduQMYXdrF5fZ-2hh;%?umC3Q(AYr53n&mVs1e;@9^gTPpx=?70-E*g0#2 z`8k=Ea(O9Q?1|Fjn%QCQh`#Oz**aTj2A;)wlES?3j5)0un*F0-@y+}m@JuM&GH6fy z;rD>o0Ha;Y^>gDRIINLr2zbfePsfXF^rsGFX65NXwo?X~2Mh6Lu4mQrkZ;pREv0DX zzwD+FGz`s0WnwjTH10-W)f3#P5o+R|B%^O6|JXp%$$0nxhd-VC5V%DO2+}^Vix*(D zC2@wY#hF}!Z{Q9LfiLf2l`bDA&luMJ{l;Fr`47nP90)>RneLxnxPg~jOOmd05sdmC zylXJ-|0Vba@)`fd{a8?+#A>>hb>%ji)`FTxAhnITwl8I68OW?JWo0h&ZU9o(78Usvat|JY z8%6OprUyo#VNcgoL1kAKCzG$oaVd!pIvk?^;@pvid-w+)NWbKg>OXj(=gGsR9;oNn z;``gurn^^of0%5#o--EN5kHLE}qAhop}GZOKGx6wOco{zIT?|iG#=**>BEF z;>Bsa$Ou7ZH2M4kiUTc?8Vfa z-Oxh63kB5%c9E;R$3B#}9}bChc!(kBXniQL9+XfL3;8 zqVG!6*>ZgqGA`G!--z@U;=$#H zFUb1ZU1Q?v-2*+OtgPfMtH#wuuI@v~HC(+I$s6P04KlOx%qGXTxZgbx11}YWYbgP3 z=NHt(J}vVt^D0YEp)JfzoP1cxY+ayq$DLILAL0}mN1mW&jp5E`GcUm+9}9#boDXJL4i4*^raO1O51yqZWLkYP zZ0F89%=clVdypj92mk+maH}L`6dBRY#Q{PBZ{2J9iw1&_o8e_ngAwe~met<%Gb1NK z<_f}1r1~>n%8*KK4G_5hE_jOCAjOLVuJX;bAhY=+O6pZ$hJ)B`<52Xj*VjjRmWswP zH`xcTJ^5BUfl3_pRBVk5fkeOTy9nOE2 zBy!wR=@himdsT+k*n6zBmxZsiv9~s_W~I$#9B4SH&yOq4s++@Ge}*ToYR-a=M&g&b ziFSK7Yiuu8nI60aQ+OB7`n!@lfth~bdt1O$j|QKwr@OA}t~apHv^I*Q+YB@3w`8V& z>I(TX-{l(WXX|hp*%dj5B#TAaWoB}wvYA@bVV51R&^7V|(!j$$fd^L9d12{U1444f?%;z+D$SdA}l1lp20oLx`C@P)J5E@3AtL%Nc$ zJ@guP`wH1I9|Cmb-b8cWI2M=_9DN19ycuV1GNEv(-A4goBj0s^DU7uyi6pN^I9A%o zV>#Kbw3UF3+>M5NB?++?(0eq-Iq?WQVlwWy7QFXWVZdXwf$TJ$;RJ89iw;3GUV?95 zAWO{(Q&WWXzZa-=8d=?y@hjfbl;)hDmD6rJpZr{@ zYPH!HTdOcfd?cY*!8y^=lE4n1pLC;JOin9EIG9a(-a5|gA3(pGgUqr6<;O+O;+V+yvLV8h_5gqe8Blr6$imqeqA*B2bIR`FR(CQ zP+Um--?e!!R&dXA!y_C4uU&xZWGt$qSt!rajBPp7?ld>EgbLqwljwRX zVDI95fVRzJeWBcvuc7?NOhb8hT%l%qbI*W^Y@|1FJzxG&e!qcrw>Q&_2KUfOQk#-k zPm{@ZIZ9UgPfZ>)3JGL@6o&ou`El>C!oA|IXTuR+0xm3`^K5q1MmMB$FcbO64?bfr zI9);Q0sP9a@BopaQtKijqDX z>!1b3q7<{nRKBqssJ)iZ1>b@5Oao4H&5gH>aVCp-4H()l&NPF?7<88HILlwMez!HJ zJ+zYZseO&B-f{H@i`=k3w@`mvWF&nw@^N!M5%8 zV$MTun`~W4S&P2~Q*D$BivD-Ec4Q(wH^gX0G;tBiPP7>=tID7U*SkQPtVL%Qgt$T;-SJ_dUiT;*Xt{7$XMB8 z%i(C`yz1KH{ppTzy>-m6M|1a0YEB$m6-l?+4MHCShEN`rT~T=9nxvb}qpkfhyY&z< z*mLn$kL z6*c5ATq27&8BOPOG7skCkvN5(E||NsgfyQ>vYE4xQk`yUkHWYo$rJnd&RjU}VcnEl zs*z;&)}&sD?q#06WP>;H+;hb_%Q-S^tE?;3%^>s_r0g&R^VxGdS#FuznIC~Y>u~Kw z8;y8~mXpEUfc)0N_!q-jk87j3oIpxj26;F;oe(8wZkfeqy#y=>)a(=S)E($V{H9tw;QV@%m2ZU3>0q)<%L6* zf6$jUM}d`OYROypl9_NRDcmE;V;E%|NAmw}zUyqP55rMZ+sR>mf_DB82~ICLLzTj@ zuuq;xd+12(LR+f+kt2_*ulu)Wa8Qj9k#zDA(_;#rMTL?#i*^M@`@6frz-77toAX`YO5Fu!a zM|B@?PIWZ0|6|K-t;$X?nVda0`N7%6F(kgMwv@3vG>_n`yhloS2TtO@jSuNx-$E+q zMl@}QQS;|uy@~<1eu}bq9N%6;_^CX?4v^!E^xk+#ZQrNN;d#uVLpROw&e;@4LAxM1 zII}mwo!fQJG1J}+{I(3&o+R&+a*%9!OK8Nj+m*d&Hu&*n@?8q@EVhA~*MK?HgL8d> zh5QL#lbi2!2ouytJUb(B?UbciRbv@X+RtR}z*eyZ*yUrot~Qc@vCnqU{?$>-mE_Ln z{YsLKVp^V4Ho8x_5;(enz=zYH_?S-!Us;Ka32 zV@4Y4^5qXD_uw>tM-{T#Z_+_Bhdi+sG!8|fZ;uf^!r0W10_EGVCdW_$WY~iKA8&6N z7S*4?eGgbL-Ccx$s92Z?gDrNq*oqyPh~3@YfgLE=GJ|3(DkgRdDz?~he`a>C`+8pP zi~D+(o!$MrBWKQ;bAItn^H58QwYFX4SK5|liKV|e*N~>)uiM3{*N0~?Mdh!W1VcXu zd}R;WHaVPe7)jkL@Na}jzc9C?p=et}qSa>nBsbv(OMtSjz)MmIFUc2HI7gZ9Qd!xi zq4xT#+QRwUw7$ALT7Ah(WskwX7SB$1 z967dI(Y)TnF%pS?K&=7@CvvR9V|ZGfSPJva6;j-@^_* zf}49lGP*D7gc{PfICYvxG?JINq*j3|_JL2`}#hmbVHuP#?u* z*q19H*EwjlwbEosEI#>5?3g;Ehm)fD&7ocMA^-VZWWY_;jrr(49>u|u3z9O@b?93s zvaeVo_lLiVVTHQ_|`hcR-%A(x4}qBxBP+@!J9Qt80jY?Sb4m}qZu#0L2~7KxQm7C zEjHtdJ}d8lzvBS>vHpBeBhZ-D&DiB+EBqAmPrA}r+#4eFo|nND zc1Wy}jd*0U$b%>fvayyGeHnH*Pr%HR!3&pwo@`*hdlLLeK^sy$8S&qR4LN@Wdpj?X zYbD5a3z*cEFy*gFa_kCcCPnF~)|Jv9HY6Ee=r`yRv|T|F6IJ_^&*^>{iUP$T8;Sm- zJ!{LR;ykqCrCHgpLv>RWfB0$Ad&hxYv;j41&W^S>O23WlECnQ74q^3Qn4S1J^nNK~ z2kM1Roc%^wLzFn1aFZF(S{_#)!Bvq>4n+gwB3d;AX+8>NSKkl6jvLDwBs<4=I+yj_ zM4Xx1!4W^Ody4hshbDuO$AT>c`)a^5MZQ|vCL_@zx_dppp>7^UmZcqCOrEG0DVif$ z0Ukkr^;32jC!HRDv^yKUyJkF{1aI^OjP+Pw-lre?4aw|fm2rw4AQ~0%g};O$y1=Ub zDyp9%Xb$7q)#q`QN06Lr@%X~;qy5YBxsSHHAQ)G3^oZ&7YS!Rcc!laNne?M%p1sSG zcvhe3vUs_jmFGfcoeJu3@=sdmlJzdooNL;RJn2VO=SdQ)s2ENT#ZNSM+Za>lvYKBm zDkI89uN@6vaEKj!bzhn9D-y}~1b%4w&WYu&m zabWg)`Hk*8f|+RhRA8tF(9})_$&4eLdj!b&I+W(G!EW1fM?CQj!$18L*5sHdisYR( zaK}j?*WRp#`r|12qdcWbQ=ia0)`sc(lSVL}xur1};w1KzxB1q)qVfGsPT^5<8jrv| z<)YPgaJOxP7YQT-SSVki|>LitTDdSF- zWVkedY{j|wb-nNtZ6I}Mwq~#PldisDCAqEDXqIfuJ-3){#{%-IIA zYZK{T=@BqQf5j`s9`p4c(Qd^cgz9xFRN$h97!hpwUs_a50L330Rd%#ae;F1f`Xw=nI9XWamEO>})fb^=%`b6+rAGq`9;GbIZrw4pK`&8tqxB!MZiazHk933@55l1rLo|h)zCwwDc zuNbY2L{}ezQ+gg;)fim|ZJ5T7#GSUBdopudDEQ@RJWG?v6PqT|hz^3r`oh)3gB|C= zi%cPtz7ncx8R;tpJm+5azX>Gnbn?+WbvBY}?vR)45=FD;9R*K(N;-l}g!hbh!^n5k z;mwbtjVjErio33^CYTjX59MrHAPUK=$;L>plheGAr+q$MZcf-2weSqrG{W}>&(=J? z<+^;^Ca%2_O@AoKFFnA`)9E{m2EWaQtDFL^)Px@8M&d`}@u)SfNN18XmQSnbD9+u+ zxmV-pwG9VRnYPr_CYyb{avSKWTHYMTRxYiY+tKu|XRNsf7VJ->=`#Eb65m^J773hd zb&ekdR};$J--@8>JEAL?}y5p+rM&jNYNd;D#OJptBai%L~qt7X?uBK_A z-JId3;kTFoZoNXVJBvU`~I-8X^J*&0gk{((q(1#+u=zo;2hW z)Bv&Xz=*SoJN}DLN$!pP=xrO*P$Fcs`zJ~yyY~PoZ~vspT<$mJpgP6YHyI+O2d?4RI zUq-x1bR(p}QkppP1u)iD#)m7oxK_iHtrJ&AU!5Q=#%MELUPbXvk@%5p=AUl^=HkD?u6*l_#ka*HaIGh!sxK@*Anyl$`-SfAL+VqkZ>rF3 zxj^4SXVQwe@5+&SGf{DtE~z@QtT@v53zSdKH7kzAmr{iVM24c~e>Fpf>2n1QNqs;BA?8Wo*Wv%zjx z=mw!VidFYvU6lqWA3>7eb7?f3g-SA$b?jCYwC}+SJ21aL!^ty=bwvcvz83sm&NmUt zY~K;oJcThf1Xk+^Gu$9Dt{Q_Lw?U6MhwdkLdvghRs^!Y=_RSGr46IOCNcmkKuIkA$tF9YwO zFKf+Stghd{iM!R^z1Umz1JRoaGn+xamzres0eBYmsA1gBu@Dre4@|zs%lfgpHaznk zx%R7278(>i<<}VT7D@l2?EQ}7$Pbt10Fgh+`b|9hb>V7#@y|U&Q~m(Q;#X+WU@+vN z;M$+SkLThTYy?{o2`}3iY-r6 z<{y5wsqF2d$d^)s>jjXLP+Rs8t*=ROOwk)H$amE>^+C-g_zH_*s_~V%sOgGf5T5LE zFASwF3c8QgQ2)V_R3%U6HU1` z`*4rMu#@~Nrn5%Em6P^?r&$Y@lg-RpTJ=Yj4IiJvC|AHx&UoBZ(>lN`Fs-9gvk_+> z$_i_;>L_=98``@=!*%+KT$@U~i%_8qJQWmZ&UBs8IHGby&ZTNBeSL zWTE#o8Lpx)`m@>~EDadp`mm;0s;G+=U^%b2aMM&{zPW>EGYJ>j3UVg4lCW`|R8T7;{{+S#qxc;;PAPnf)!^rwNxHd)JJ3#M z_d=9Ep?{pxX=zKk-%^@|N}jMZs7JYc_XZG^^jiLnK0 zN0ZJ>)>jW&m-3W#X*dhx{EN}S(+FS5Y_7lq(Bej@?>=*mC(-zC#FMv&XX^&*_F$Ts z*5K2sfU5mH4#6~5@Fz&cxT6?O3&07m%otJu3_5?@x$&Te2FomKn%^bzp-+KQTDkY$ zkzx8xBi7VcuTkYHo6=1Xjk>i9h}C!)+f3Bvf0u9+SD&-bM1=jgProWR?UWm*h3*x5= zeBKCl$=A^sw+7w*3{H7KQB=7JtT>H!bS?Sdi7<0D(DU~tt#*(3uceFasePvZh@jGe z!~I{`2ideJyBDEs?|~j`HrX#fG*$8FE4TywV6MpgCG9+1@f8vQeVHxw|0k+io(`%lw@*0WgkD^-7z0`|b46jolMO*4)( z;gV!QnNft61T&8#b>tL`R6XSi=Fpa$afo^w>bmQmbn>TkcP_-EHrlkre9fY;RVAJL zm;b833qiGmx&@x{5BIxl8*a6ejF4%(V7NhYaS;2fBxc>AI3kVv%jemG64$eWWIzL7gzLn8Yjg+w_V%|jDa2JHJw(D7jHeNt+N(4E=E7-yPg zzGC@jjUk=9bbzF2oucjNQmt;kWF2fN!+GB)|Kyuat81m5uX&|zMw4_oe9O_KarB`L zXrH_{wn%}-Yj=|SQiBfV!n6xM=d9oH zycGheZq3u?~@>a`~9MTmR_TBntyqaS6zTu6P0 z@4qpltWoc0h$d}mr`g9EXDj5ln31-Y^`f~0-n~MG2fAFm1Ql@Xo`#|9!?7JOv|;E@ zOM@17L7|WgM_U1X&P(xCSkhEpXTSx$KYc9z=*F^)Ii@k zU)4gb)7*zAyr|38=aE1$)O^+wYct#H&|cczAjC*W9|9yuQtRJ6Y70S{Il39%VeZeX^$=-OnJCBfV zrXYK0B6D0>w8i228gLUCCb{LHwWn>lC4kQAzIb)RS>4paxwTvMhPCB%G#L&Ys}k0> zV(DUb)R$P@6(gtnDC@gk9&Nb;|84_t>zS-I-tYBEbu1*DKCHUpiM-T%JX9YambG zI+{x>z>L|*ooZ;9X3RDXvQ)J8HUBhjG<1fQsX=CO2gdaqjHk_5*W|IP*ozus1K;+3 zQe3~Wii*W2_=Oz5jrf2kvZ@^inzqiPE7yTeF9jzGXO-gxNAy!N6?Wh-`(`CAe#1!u z_=d9j5c6y@yrk6Fz?5TNM5@;SqlP@cZ0!xk^l!K&``{IQf=_2WySbY9gu^ArSk1lS zch^SMeu4FTf6`9M;}x}_FE7pRqC4yB6Yvz}aRz7O&Rs|T&pZ%|Wct+p$ab*05-YDO z=a3X!2W}u7Pr-acma(~6Z)surXxOM9L6Tz}h~-K$L`BN-q<~x^>1Q}eg7w+S#)?1U zKaCK5WS2GqjgtY?^fCC%S(3r;qAM4pbB_Z@cBhk%LYWasH%xI!D!bPl>3msDve|bk z67W-r$d}8)Q}9BkFmyEDHLW$jXH5}7|AJUsL}LZD8%5vFb4K%l__OV3Z9kzv5rLr8 zL;622*fGcVXq{?y{Q+JNQ(#h&5KA z@`3VzY8FXr1L(xqqkm?IHI+BdF&5{#pQPRGsK*~&f+uY{yI8fX7y6H~p8il5IoW^U zK6;SE@e)npGEngvQ$uc^KB1Id(NGFSZaW#~eK9MeD^e;&6 z%^b$PD7rhP+ETPUO)(TU<fzzofz z)9eyMgwJti52Mj5kmQx$DBkix$Blf39-u`R;U_wxPZF@ZxJ;YfNmTuLl11cm|CAk< zPeqAiM*nmNUgn8bsISe8v)c69utFb8GJ92cnMSI?+;Qj8K2?*=klv9*Np_Ipl+0Cs z0_##i_?F#rU*C$LwJ&_GfK49cbr$`d00f~Un9WUJe=v>=p&$ELFE~mWGeBeXz57Au z>nMEjlkI2Do5oY0&f2z*v4bg0b`p93UM^Z)*$*BrUZw=n2b_SU~Q@c%*$~xu>?1Y~p8pQ4ps8Itn#=+vv>=rM8 zh)B^__lE&-r*KRLrH-LZu^fnLEfUg4lRlE|>CfB%Pgaw$s0eLfXyUo{2N`v(-1mF% zNJq1S_fhAl-)n3n_MSD|GnO}eVosk+!_ZbzTW^ye7lMmqHM~qY5Hq=W7Fg+i@PV)B z`uFN7fstEiv#f=_crG|;zE2gnkt?7#v%pVUGW&EFe->hR~&*Bx+%h3>!CuWyS6aQxPkdiy&;BH?; z1HdniG83G%GRf#Nl-2HZ@=~xA3E+1*79AfCYfDi@@3B=e1m zq`A9z(~qJDDxe>3$S{^OJlAcaZDktc+zxX4Udom7>L@+WOAL~!%%!8iD%ay7c}S04 z71)7eV3W+s8hgf~pwx?CBFjpaFsHiR6x-o?KagtGfY#V^VBwu{ z6!>%2ML_4>SKgg^v)kvnPcc-dC&-%`j!(ZX=zKl)))OQp@DFdtNm7v~{;BdJI@g1A zF?`nb<(}^hBX?c9hkl=<@cvH}8Zxr`pmY38%G6F=Q;S5wqGPZVUczLaXw83B{mneh ztp=`u8=dcr-r7l4byd*$>%KuS(r;m9u8TT|UyGN(MCVHn(1KE5VJ0K{4ov7pQnq|y z<20rzhEO_tZ)k3T7(GX6RTekL46s6#vNR|_|{;?FTfM`Rx|>A^L}!!6zH-x$$O&!5ve|^?xU?1(`vWH zP@gP<7Gz`>z{T@Rr6n1@3q8?$W#3svPGNp?Hv)76p;`jdp2t|$no-@|M=*!h&Mw^h z9eMi3kyd^QUZNbIE(0#I2V-prs{sY8z%cNm$*l9g%1$%Vw}6RMlC3Ayk`SxEY*=Y} zV^~O|Tp4(&aDlA^edL|td)PS~pBAlGY_c71iM%3lAc+OYy zS+1e&F3wDo#8?x-xaiJ#Isqe;CGJ5#d>ZL`Vd#HS6_b^1K@!T6(A`P5NbgOnT}|Ul z(o%d=)^!3?A+=c&f37a0$6)CAsSFM4jN_+QJOX!^!Y~M913XkGR;=jD!zrOLymX{TIVP(_YI{({Oxy z*^D@;nj@^OzTrylNSoI;Sxrz{i8Mj-7lcyI8lyd$;xo+N9l_`o_zQBt#~*Q@7368G ziCb|Kj;%1(K@aG@aIvd7jC1IXbTN44Q>bGbz6O%aV}S9C6OWD6b??Cj|;yU zyLO8@UxHrzVWWU{=}Z zQCLUO(sB=sdK-$TB@%x!XBzUXtw!(ii#u)<8M-mt?`6ohT1ATKVDnk)JCH&Hodlc6 zh@PfdLYCu4P?DkS;Z*chKa$pi6|Ez=g_>7MC&e%{JwDul$2rrvFjaHF<@ciF|0uMu zn^?(ysxnWx5TCLDbkj~>Yb+e#X3pHEy3cN6uVy0|u1`_Bv@v})kFu=;soQSsM!uX; zC)27m4s}<)`y*n;vkbj7}6EnS^mpc9 z7>M?zCW^}CD4s%KNOH&rKSaKtlV|@n+BGBko0%Ze7V#fAh^we-E{bk)wWX-a2k>ow z7T1xiBlTqz%@2J^Q=2N+qHpU$GxHf7nmsl3wKa6jap&&j%$r-@ShxGR=#)EXu4gji zOuwi*j<4a1+QtrkH<`#i(AZUBC+m=%p&{}o7<5CLF|M#r9Ro_<5O-BHsC+Lz(E;%* zaS&Rx^AbC1pjSBvL*?tf6y0Z%InK7gN42&pFAAZ*IF{-OG%`B5BHe8uY(x;7TZZa z97VTI5k6z8R7dhk0dhco%BLyp=n4np34e^fXdx|<3+MsJB6($$<-WDAeMG<%zh|~M z>u2&Wy0XeL=!0|>wCy#^)z4Jnu+o3X{`i19{)=o5Gfx(%aAn5-i{M6!INm_86nB5- zL2!8^NY+}gv-+d~1jtvDi!q5IL6B4rrr|>a zSU5`WF(76inMvoM^Q}QHM;JNQ!5~)k(e~`8VW+rOsr#ubY_J>ao5q=MTZ-A1*`xi( z6panI;#bRl#M<9tH$SCG@u2>QE?xUq6V8765$Mr=dK7n}LAnNJXJD5z8Sk<}_8GkJ zB-sxsbot!DFA_?M@*)u9F!==XK$@a0aVXEBC4H}2s_sBibDs9P?u`DN;ghkrxvM3E z?#_vRO#==F%?teEU)S%bt-DogxnNpvTt@oL0+`u+O%!PqKk1Nss_cTZXA&9Jr%}t7 zWDL$gu{eo@hVJCm50p(OQRy1rbQFo%59DPObLnyGr+fxdSwOvkju)-=A3+(tV+hfhDSiU%i9! zEBIGk9P?Rd1&4zZR|gk&$YbQ)$wl5NzfIyxTQa(Rl(FcEYLLFrlJtuunp!BTp6IUX zk8td4(?4@9>onUP`(S@TV1Ch-!F`L~4QTD3XWwfZOfExdbEK&%$qaMJg)riueWmH6 zd9EHstK)XMRR1b>DdSK#|D!YMq+$>LlqAJ&c84z&a-~C=NFusg)t&av;_4*ux%HqV z*R%eJ zrD=a!VSu4rhU&rY!dyj^xg<=7psi<-c_*7lh zPCmgdcB|(#L$txVn>tz=4U^E&ZZV&?ytZ2GBm6%3y8;gdKKJk9_rx~c+QFhW|1iEb z6gKGTEuEu%L2v0H5;690=VibPyn|7UA)6wVbdj2*-nf(DU$AP)C!aDv-cmjrY}m;7 zkjgVYgM`>YWFL&8!EX~T@Soa~?3ibu<4iJLBoW_c8)3iYwzWFh7$?IjIbmXM&jtfhX!nTfteB z6)}wK?@`a5S5)LX3c<}#4TN@_CXjpnf^L<5nPDRe>f3b24zQiHclY1o|Ipsv_RX@> zJjhfJCrc>n+mRewt{FfdL0y=ENY*+{QNAU}t>{5UbF6|mO4h(g4S*Z#NjAtVkosG2 zVKH<+x?EF0%#_3>GF(8zsxB_7)i<iMSWkB+p3g z5!PGg9w4>8w5EQczq5{J3fH_8X`*@DLwDgr?lO+$;YupTt~wF+vw-B9crR^@V@MSn z0W!9R47(T1>uphQe`5W<3nk%lnF5bRC_Q!!l^>N$R5eJRIY?XaRQz(Y*|!%qH?usp zR!3Vc0Ya!|*O|f0>5MgE2=?gJg?&WZ6OK(vAssC z(Js^;NvO#(Kxe&44(P=d`6jBxccUg5s4zKbb`$_DP}MC{)Z^;!Q;o(Y+K61cws_Z4 zjOEO;&5!WQ)g?(XNLvcteH^T>x3ZyPi~KM5+G+Z@li}FUaZcXi6wa_HIJHZ-0A!{O zct&*+${T^tO+Zb5Ls*EE*Ci!O_vu#1F(X*Uao$@ZX#WKTK9?M zm))jcc$0(%(!bb6o`!F=sXBm_KF6mzAD>)XaN=mR4n4rGHj^PJ7F|ZS*Iigqs3i^L z4N9L^WJn4@>KlSn?PBK~&iC>VjCQZM1kSbyn8HEi6rUomwiM6)E{{jHrM49b7@J8H zTyA<|SPf2Fm!74b>S-jY{lKLSySBp|9&s6Tn7%3u;AE`C@u5N=uiLnmdM3WhM7>HaJvOVLr@20(*8H>dJ?t zUYr6Qz6o|wi2RvY6lXWkvi5$ zy3%f_$)|%LWr7=(2EBKpv+F{#r;Uv2zoN-v1+z~Z_LIla7FK1{xkF~|boCS(n^SZ} z4Vi}O^qM{5Y0G9Ep;p#ZOl0Tum3{LHP=g_GQ6u37c5y!mgooiJf=Qw{$nkoRgb|5; zIufKj7L0fk=#dY2))G{ARXhnCUEs!IQTR;)DZM70$Ec&^so$xb20zf8F2k|9xA>(@ z`e!&Zx8V}H&5T+aZeX?Srl-U5AuR;A;QxN}+o}q4$RcRWRlf>G)|=+WvS6ha(mzUo zRd({^P`ra5NQ5P`^6Y1G=N|+)IxX&urgR^@wdLd=w}gJR;;eHQldpA=-jAg?f=?=Q z@Cnt04LeCLd>nUtWfHopp{7h^EWHd)7f$NUA&}7)I0g)8=LMdl`|<7fAO+~MkD8Q(RxVM*D&36$-f(h3=rGoTP~Rshc@w<%Y0ljaS~Le| zm|Z#u2DA=3>IS4V&wzo<29=8@f5HVm+L4?eKM?Z5d;%>fbsadObzFG^&WdDw6P&dL)X{^`2t06(nOV{9Z6Z`ufn4mb zP&ahsuIniJ1u_)LUAGQiM(W8M>dze?&hd%p!aGqFZfYWW=GQ#)!*Fe=K})Z~2=Bl# zb6DIIHhLXR;Z|0foAAjs#U(041rp8*|DK_Z-dFcbbKT?Cu_+sPbktt5=J4KyB%^T; zjKu$zLfeNo`u%|Xqd>Ag+J<|kgs%v9O&NUgw=^ZrY7SJfv#nE#PMpu)EmM(#{RB@EN7V#Q7 z9B;rjguu)!#xG+aeZ)Q5#KQ@+=R4@dUAW5Uq|ZnAz&K{U@4hjtI(*5Q$|3LP3+zBu z@<-<35|t{l@N5i4gVcZ|it#v=;*1&kNvL}qnkaft5}4thpx}xHq4py0=n4wPtDcc| z6KY+d$2U>~?esIg{Ulr>Gr{SX`|N@Z{lL@K8tn8gP0hnt`IO^Z*MZy>m7JCgWT%lK zo4{E2LvacX!Z>y}^U>OwSl_4(r*w<7BWXief=BEgPkak95I&;fUL{fBo$wW}W)*jv zs~N=%m*Saa3?SqWVFXT*2A@SHyEkKCJMPMJF!3$mfqlW#Zi$+qU+)EKxLw+WM#D5v zYJYNr?}KIRB_I5=uDzj1KNqTO>ay0iE&v%v@DtSsV5 zlzU75`6O`ZaGY8~bnM7?z1!vDWxjDI5TFZm%^LPo#?*(9#}7sVk) z`2p&Nq{7GRR*+eIn_Wz{el-gEL3rR7vXcMESU;K$!xEhRS2XMo**yqgW9x~2;{6)T zI#MQl3P!(&mDPN{=~bRgyLY}ulHVrcjZ<-@t}w!HXJvPU#G4l$<;flSTzr{6syiwt zxi3dRalYykz=^lfZKc%T!~cAXu4a>}o^n3<8|83i=1SX0&w0;Zp;&csDl`3 z4D=nvlH;0hu4u}lnZ1p!Ir-qNSy88wP#vXM;?cXLqZQprMra1fdcPPw+KVjY+Z|x+ z>jw`J#mpB$0!kYg|0Sqi@<8W@kzZ{h_3P;6)D2ZL*gePK*s`Ib7LvYVm2O8l{Dr-83$mY{!S62R zGjtPm6?MUvJQme_8h3e7aO$Jtf@s~Y)Ae$kwCW4=41JQ%$EWgu{MPz3F!*W!U>SByEnDs)Po_*{n=K8x)zddO zj5MAx`B-*X+xktkeYMOqmoa%8FX&I`&U(^EYNPe~qHF~lUzSwKDrl%%ld-U#{O^C@ zG*j`amI5&mpy>ZXZk&!JfDSxg8Kh~oqXk_iOGI1Op7U+6^vpdDESf?gG01wdb7*#&Yty`v=KQJYVr!clGyrLF%j`D(-4vb^$r#5cYGlsDDg(i_K6>Xt_#j`0TDvq#sJkS5?4q}CEn}GrMxYQ$9NigLNW~*1`#bBmN37hR;}{6j zWOM8`WNH;Pgc$3R61~atz*^6~!EZo7Sa89jl>*NDwX+wnxhzA?4Na|#jYwbFqsf~u&*!X9H=!Dy3nD*@|CP>Is#H`bW8^AxcmfD{9T4*B z>Kp1|B<W|(@@vggkvwTWLe9i(!)`W*J|Yewj_ymbQKNFMe?Wj|2M!bqX0BvLYxquzJ8nzoB-q z?Vx3(xs9oZv8Q1Uonx=H)yQ1?r5*!<*IV^jIZs)FOoZiN;Q=U9+!*;8b_lo0ixZ>z z9R*@9R`!Musf16W82EU!=9y+PeNIBXJKyDmG1HW5_P36(?XX+@7X=h9nilHtW2 zAjUcE?oHiKDsesX(+ZJh{toK~tB6UAN2(KA#8$Z#B9dF%j6ZysazYfSK zS~jRr;9>ttco$k*|C;ximKkT^oY_iiu}0e&Ue2VRLMFVs%W|MXLfT&=aQTzuSoGm8 z564AU1|?oQ?)PM7@!}-YKgFYx3PQAxHPl7CL4`GY&^eUUdFems?;Cy@i;~Q~!1@t3 z?5h9dKyA@l0mu9t_Jh`L;D*^o7g;Nrx|do%ZFl-wL?--C`Dnc1 zi#>ecRMMofg>D>k3@*N{tC~08Z-K3GVFfS;8z33$Ue<5b`O<# z-dhquKJ%uwNg27YI3G1lAWrKW};NdEfjcorsT&cntuhal%Gd3u$YZohx*uySrE(yvjA-(M!(=;P z1s;Nc)*@NvCQh)WVB_P^PR=1c?>sB1l4#r0;X}tT0`{d(YXm-u!?c3`1uN;LE=9h| zMbMJdXsCZ19p=q6*RHkK@*9U&Wu>{Y=^u`XGxV>#*A&rILtT1VDOC6W>;^^k3-{e-m{xk5AP53Q;%r*n`cI)j88Z&eiE_j5+})hIkC zFtbi$W_PlBDM_|W2DrpL5b^|mrm$x^MtY%+m1mOpm$(D>Lmd*Zn#=Og6P8ijC+DHI z%3FPrw1GtYkO}%l=<1Bja&LL|gw{pyzxU}6-NcS6NpnU0T~$UkT)CGKr772(*%}sR z2!4SztYGp{ijPJ`UK0I{4=e0~>~aD@82W+I-vucdA-+bp(|!=zi}XkSC7rqnT9@O> zajIIZD09#hW`h>VjXg{!%}uNlTb$*+X}+;G%_l~7G&XXDrl8&bj4x;`ZLvYJndm!* zO8(&tEz53xI%t9xJmI1+1>MJ5a>;jt6x?TRSpf&`K{{``coJ4lqM^Pk9Y->K7V54D z?*5CadFnxMbFFmU^ofS6Mhj0~J9GziOnE%z+sIH|fG76>vwCH|@nn+Oo8VZGNvFfa z%py%P1BBd<^}IVzu?MJhB$}5h;NEU4S+9YB0(+G?&+9RoesS)@Bmkq^xPj zC>yJc>Q^Z1&XNnCr!QxmYEoLxS}f+{B-})S&x8h5J<~{K!t`K1%XezFuToRwLnLCrZ*P(gXUE$12D?787$&%@0LrIXU zAaVCty7S4Upwz=S-@?LMpyKOLc~1A81xmil_dJRtJA0Z{^k-J#{C!B;`!1ddPIy8( zlo9xud7wEg;7HLLuZaiJwmlgTs==GBwBsq7G zP#uiYW;FYVdvL7Xq$ef* zABu;N zZ<8TS1he@izW_VX8`PwtCX88kl75@P-xOq?OTNw7L5|-JR0?f#kY&?B5>1 zJFdt5zm9#{DYzdQO6noLWx(t%l9D?Q)G!fc?_89$X+AGFep6iGIlh(Pj6S39yG}0u zTk#Z0S(5%X({mL8LY=EjSM4J!_yC-sjCT4xCN&=LrMg&nnGPtd#?ftd8V_hmvIlm- zvW^tzp$;u9TFY+vB?|f4#Cu!;864x&6IE$rvbno}mCr}x`_88*IzN}M1b*N=sL>Wt zNpTw7%x_65-KFK_zIg8sqp%x+!fu>)r|zY`zHyW($B?A&p)0Em*OUi2X$}Xu3Y ztdeww88>Z-MqOW2xqqflK*MmO6jW8p@ z(!OA&l~DCLNO|dwns)~d38C+Kkg~2EyBI2Bs3n>-tB}z?1`O{l{J><`nUdfeKZHF+ zuSE&414mJOg~-04XkE%WI|h8*kNd7OZ18tOGx~Z5;Zc%l6$G{@RYA)7V5Q6Hbka#X z(6|vI-bmht3%~nE5Slt5Wk)wnn{Q z6s)osXjLPyvL&P|d<7vNOTtD;&bkN)bpa6i|6tUsLCB4umB-OhkHo)JAFj9~O6GN7 z7!ve2+feV<;jY&(+em5D>!iP7sBJoF7(r{TNGky=RjEpV)b=GWHwz_m8`5gsM=ybn zx(VmL0(Z)Hp0ja$(_#NTy1T#A4^4M3d=%GxOdS2FuK_&&nXoZO@50enNm_v3T#;>N zR~bW+sGgp$0yOZ%>2Dj_;Xj^%#zaA8s|wdf8D%TQK>1qSz9wlWu)>mHW#!Pawgacz z2=^!OO((~w9gc+nkA_@Ghh}jySK?u2?sM12Gv?S)-o6sH;>!18yxk~i$+_Q=?WgOj z8A@h5=)7E8fu`pBhEdFKYxEuPrr9+C>ayU(0~PbpQNNRxkq%>&ttw8%9d!eo&{vp( zhE`5%>A4e-%z?x@}2cc7C6~ka6o@FKo z-*D|G!$maUSqn!)?ncOmlQ@!vp1BG66M1OJw+ofUN$;m5S=xg{)8F#*xbzZL zeaKH7s$ByQTZ`<*$@n(%m|yq7iY1e%^&Y=*=L{}n(mR5+*lW_El;Xd163mV=;`FVRHO$Z8JY!4X>=yU^Ofq%`v4)pof3XVwzn&-+oOnH}`%`3IsNugy!hZ|Ma&316P<*atB!*EnWq_jH5mCS zTw}+5Z<7xmgm!*8`gM0MdO>tRU&LeS96HRIn_1V+#TTtreZ`-4m&}Pjy0RoMf@S|%?7f>LxfWbb&6PtXfyx+I^%h@QR} zJh2-e-;d_10-ENRu#XuybS{y&;YEILO`h|OjB%mNF8BG)AJTkLojdNnd62c7Ut8M) zOIPzpI^7nMk~~N|o1Uvol@x|#0cxivJo&*m#zfN9tnBd}p@r~;r8+_`bItN@p)rPKCjdvpfkaO+fJ`qT)VFa#;X+hrO^81GGa~Rcs~kqB06Qf1AR;f_=X= z+;Y@3o;yFBX0=lIC;GvMzea5}on35o)K(?gy_ZM%69+?=$>`mg&k%@u#G^cHpMO25_#k3=5#HtI%joIC}o`jY5*5|hO{wBKo z3R>r)B3F?fnXbF1{iIQ78mPys&e6a#Tycw?>>2Rc3m_BUNPvxHjsK1Y%~TR+Ry2B?~0|>CLQ$ z0xOd7pce_Q$t2(hfgxp*z`p^V!78+s+gMFJ1v#ljC-r&F7Cg8!P#d_6-%ZuY$S!Gj z`e}=n446qm`5>#m<%VggagZmQcno{GH|kInI9Jf_ZbezSl5~kwx+A~hZ5{$LZJ?#% zGfwk2cofu(i5*EDxGwc40pg*o0og9Kz%pAZ^OZB1QUBl>m`S%$JJ8YzMkknIP3sX` zS-*7u5&SpzDBZ+P@iB}*4RT;I*{@IcAoFivJqxKe!oPi2AJYuhHqcc?S=9*CU(IhpJE2Ogj9Jf zOwE1p|LNd`E!p2ULkE|DlJzu7Qe5M5cN+8tg;lu*R=};K{>6EZ(pJ|6==E?C#Z6tn z46;ev$n>in@H%jA$lRdw;I!L744+yPE!E9|BwQ6R1fc1S!;SBa0_ut?k_P2ScsBQI-!@)Fs6yBS*!(Yf#okH`>M zPlZ8cG_hlCZrNmgVGHux?O!}_f6I-xdM63V_Ic< zef7?5@9Yrdz1(|mx9eSodpGnBik}kaC~(bd#E8kgXB0^Fa=-tGR~66uUwaiS;C_FU z_g>HY7kUr!yuV?AkDm80C~)5M{>@$`J?}s5^~&@6CEnvb?{DiJ>Un>e0x6#NPbjd~ z%l(<23kC~D3i=2{g4Tlef|-H^f++=76j)MVVu5_GT(53|&4QhRw}O1mAy&{v&_ZD0 zrzC&xvS5&4n4q6PB527^f?&L0nqZH2ig%KCm{*b@p8uzU$5?huKext zf+~XQg8G6n{QcD&sfVDuKq@H3Pg}tdL4bFFx5fL6S933&m((juFhvj}c)+pSdX4rP zB^b`}+VQs|`Emb_cKnXng6(|fSbSB}>Mukv1Hy!HzQ3hD~#2%ZU+dM)v?d2JP} z7pxTYhuxx&o>vcnTp%dO&;RFN{0V=q5P1Ff&)omqU7-5E?{NRUo&xgj zy#!ufKL7WR1$wRf?-{ti^xS0vft8p0`>D#SJ}>um>dk8;uW7uN@=D^B$}5A{HC|76 zec<(vmy{1+;Z=fH1h0C$+VYCy#lHnv)4DpYOnVx&-uOQ1_|WT7GlT*`zmHcOtA9Lk zhAxkARv)y>S^Md8$8CL%v&QC`&i-}hx?Cgm(f*^hIg04FI6@X&c1`~}$62BMbw}gj zF6UP9T4(yx2hO{{9y+?D|8(en%y#WPt%%w*DA}o=`q^>oy3|#E)V#FwBeuKtR5V2I zS(feS(pcfT{qJvD=Ovrd20Y&D=-Oeab85>)&UPcaxz5%VMNhn$<~SNR-?`>)L#N-w zv(DK37mn7=uR5)ZI;W)%U+LPNCjXz_Gq1B(bT4yB*RG4n&MBj>IKTJFakMLa*{OYL zjGB99x9df?B>E+UwR&E4SCM`9oDD+Xrrmjd!_hlX?5a|=Nz@0^K3Dim(f_meY|P7b zlrP@HHEG_;NR8}>b4SzVG?ysO9u=x!?1+?sQkvir&#NXCFGAh)TF7X=bOX?re9K z6X!S%xBle(l;1z<%RqqE-S{!#ZI z=elMrDjFS}chE7QeWLSnp$KPz4?iQ5XDoA^e7f3MJgHKYEc218e22j31N)O5cjnde zyk}D5r^nx)*x`APdAlHLPG+{}J-OBuj?v%7r;Q)&<6KCpe%AE~-m#?^D( zB4>+#FC1UPyj}lt&pI3Q$a0<8TP?b4+slq4$Bsuv)C+gXdd_$5$b9K&5Ld`mq|tfj zTxXWc$G5uY*}2`ZqAU3Jr6~8aGiyYyoxuN5E_@k(s zBVR>D3U5dK=Gm0Lf8+?hS(fjuN!q@h>z(U;ZaXdyKjz%gPwZTCw3lnh0q^Kvja`nA zWu+bSRxNWmU$1d)9R1Dl(#!7Be-t|3=~}sreSSME(mcnuP8L_~Pko%d(tjOqy`_gE z<)Keh<$J%=uAS=QlC}{$o_W>Y^`iV=N3StY9X*DKT$}xRI(J0gjcRI{=NQpeTsY|1ZITBpI$J};oJ^!Eg zculV7%G8E=-g8DVJ?g^Y|GcN`;M=)`vUe++}?Yx!F&`P%)$C@~uUW&E^nyhuzIVFlNT0{`- z^L46g&9@GbrS58uKl0h+*fDgP^YYlls7j&fu2K!<(M=wUqC0L|>v_-6&tli}R=J+{ zyif&2-Rp4Re|}HTf-fD>7pAzbhK-H7^zoImTAQbiN(0w98@;nR5C2~8sy4fEczakMI+aOpCJI5#z)?<&wr=XrLvyi0MlitO!hKRZ#UE;}NE);QhIPBCX&SEb0m z4jx0nxJ;Adj8x&6lzt&9xXihzyHbJR_~s{$7dNZBP6p;2?eb-ub420Wj@`EV&Ku8~ zrd^0?I%S+Q{T`TDdYW3LhDD{tH zQISQiq$QzIRTKL-vlDY28`^1I({EKtd%Uc!YqS4r$C7a`9bQ#pT>a_|K7O%yg{WK2 z#yiHItmKSbWJ`+?G;le8zjn09yy=*>+T^l79hcVs+&X9Re>WYD@WamHDXSt)6^6R* zb^7o>y{E|--{@*#!(6{jHJnXjn?(kEOmVc7zjjXVo*TKh%4nBN_ui2=+BbSs@nNnz z@*2)~dArDV*HRoKX1#VkoBlfTONY^}yh8umd&bv!=Wzd?GtW*%w*1z>>Ha-qRyB3@ z|E6}je@|+VPjuYIJjd})!(DN=b0f!|Zs^QAm*RLdp^3A`Gm}&IZ?x-Y+W+>R`4`_f zw&W+cbP1BEPSvlZ9ouosQM|v(CCu_pt9w7#wX0yZ!~LHAUlLqphyCY0NA}-x1dsX8 zdv+ZTc0FX=8b9czWBbo$u9D?5s-CUTrs^H>dWSK8snYy z7~5M%IVZK4;7Xq-{{QtoC7mxE8{aQ?Wu3khRqydE=eX$)9I4e_J6|3QcXqRncdc(P zigrIcIo6Y|?K!O+?q?_U_btc2#4}F!vva*!C0D(rFC6Ygc%Q;z$N9D)j*YbrMz!mH zEb6CHAo$t-h9hx>&UNtf^fdqbot*!Nz3%{vBKh|1Fhi7J1S75q%m{*_PX7i}%sIP8 z3~LUU^AKjp8FS7#XJxuDC(H?RRxqNXn0==Q*>(57tGvtJ?|$EXubM+wSN-Z#b=5hQ zyQb8c3+UhWo_r&Ck+Dm^QtU&WE4VP}D7+spla3AP!&EPN$rBGgLCqFUtmVly#yM6t ztc=@PWcGQBOvgZG-g>X*RdHuI`S=-F&VM00IL8>5WE5rlA74bv`ERi%B9Lu+AZvC7 z{v!MLJ&hq}p33FN`Wu%Hc49$IE~94C6S%e8mep+YF{$c;!^Yu<4#I8N9of9$v$`HD zJz0nTSJAfJ2^34o#vCYg#CRno8?(P;dfkT$vN8D&+iI`Q2x8uATFL3jqU zQPF|yS#>YDr(UC3`FsZ&4Sp>rU({(9-0)_j?xf;3$H!1G?wjjNt=CkR70jpydO3BP zm#kopmwNZFVJ62tL&38C>?XHMQ+DSv2k0*tii^EO?TtV&LgtT>?F-Ey?Zn6(R~cIyN$p$wb|G;?~}r2Uep}^ zIu9TEu9lmWFi5U_qFKr7Ptm3ON%VYHz=WA_W4%28%taICSiw-uwmpOXRm{NhXW^V# zh;1Cy!I<@KynG?x9L|TIls^~mA)7br!~(a8TFyBe6F`6<`aggLuE zcbIuwuH(k;k8;IdhRH2fHIhHgNX5~RFY@rjigMbECM>Yh2b1oMYdwU`+q^?kbjR(@ zX*B45T2^$Y%t(9I|G_yZ^Am;pK9j1Hl(5Nvm2{}|Ch0MacgIIvLBQaeY;EIJbwegJ zlQ%xRhtJOou?+8iMkiZ3Dr56y#JxCy#jV^Vt5FTu`wQJ=!J5~m>}bwhZ$%jMRVcvT zpE-+Qw+{&EHiMOD-CL>`oRNa_*He+|SC5rUsHEB9Q(6AZZln3eBFul#2u-U9Pu70_ zdGwbq;B$F*6UOV(S)E9Hg{?3$o3{otLAoEk&k6NCZrqhRnkiH8yfL?dL_1Q zO1$RF8!ao>?lN+NQJu)A?YuggaVItyXSPvG9umXpGfs@3GM<0| zlgqKvJG;_G1#{tTn!IZ6cB6vHK>ELiITw)uchzJzy6$@9mH7^kurDMGKM$@rFW$FFR zctllLEI+DXA+>TD#G2aO$F?<(5qYLRD|016T-Y+K1^{}RLy4zI~ z#x|g}RO$S*Tw@}dUP6h7&aCpS=}8-`{bjSY*P&hUUUnXST=Q|DKeLX03aauyiy0ZN60qSO! zVBWt~kXKIV$Zo1Qt)e?Z!RhR-ZviN}V_ohlHY|THE4ov2Mj>Wnc^>AZn>AaUmx}o` z2Rs%?9c|Z3TZ?nt3f~8qVA+%}yT&Fsp4nO8`2ub8#0{_+%UJZiCKwQP)DZiU$8z*FeBI}OiP zc4b2Qf|^WUYdJ#w3|+ixvEEWXllDY!F=5oh+@w1z znwT)&P9?NArmbL=-`L1=^g8JmhuyFr>BdT=FVxgoT#H$sJB!?4W;>Z{?J$=e_!Zo-GsTf?G{#F*P1Y)3s%cfySHH1vS)bmXb|UR!Qdu(~NE7SXnjO4<3;AEAqh-l%>_EJzdD&%G(xP<-FmeXzU8ikz zZ&!6=v;0!A_0T=6MKku)erUZi_A`tXqEgVfvl%m4*Wmx`3m9wv;h zzJq-7I*kDd<2SXnysl{mmBwR z*7GgKz3^ol-W8ThR_q~XI^M*hl`0nbrLoNA@4_lx5VZdmrijM}JbNXvPuDxh&z7~4 zC#K)Ru5@eWJFc!=ZDR+fEz4^a-HA=yz>cph14VbZc8_qaVri4^lw5j8=KYKy)#S89 z{kUTEUq{cnHs9_Ib9>)KA&+upI9k5=N2AOKEA%6y_=`UR{O+fubG*00P)8Hl-|^0l zLiN>-rRXu$cOe=;)Qc#TNHI!0+4JV*e^2);a_eV8XY(}UYPi?;qQ4q7U0ppI z)T~v*wU(!Etp*J}YSi~}tKnPU$ERVfS~a|C__)>fs!_j2%^D3Gdbs=6uI1%cqh@{I z`fjdX?zQUs)U4@RzoDzAt5^N{HEVeJxO>;~Z0PIj>QlqFM$MY_Yt{DfZQ$YK?dnn6 z$D_V??S?gLd3x5U>E`NF-XVD| z-hF8az|F(8maBV>njW>>DV?>r2L1Z?9y4Tg=|01U4(&H=H0MZl@gOcA-=0=WI8Odb z|4P#e6ipNMuRu9SO8^7Tk{g*hMd_bbvGrB{aqjMR+{qNhrW6I;1p23?yW(%UTM>qM zH76&Xg3q?sBmZ62p#>F;5>HNCgd&Vmh(b0$?hG{^_NLV_#qWDlyt55Pxa7ml1Z(u4 zV-1UX`EYQ&4f?dQ!#>OW=-;9M8u}E(3BC}X%qxUmPK6N_R~R$j7e>);MKC9+2vSQr z;7fo54nKCl%r1_Yb=nboS`@{R3q>)gUop6G#W8z%aaeXNf$RB8qUV*8NL^P7fssy# zA72`tBY(lnv1M>2v@A-lDhJ(#^02jaM*Ai%xI3jH%CD=0DHkfEepVG6DO3&Zt5!#4 zZ&yUNu7M4|y5W$YJH-Aq5#P@P^Lu-uao1Yd)v7k~`FNpkjXJnivMwUc>mlZOJ$yQ+ zLE1J6za;`uBefXR+#7b~eGvK42QN?8N7E$@u*|<9Y`lFDYtsm|QyalI>TxgBMVQuhG(-w0w+TzjTb~xXr zJ$i8+FnxUojPBAAf~phhukQq}4xN$yu`@a??tu~maDUVXhbHyKiGuy`bwfXt zY|$Tgp7n=K+;8yn9DwCF24J3HAZ%+4!r|+K5FIuc9<_!b?7TfunvCK$iu)8ou9dSrU)5!+0U6+QK+JxY(p20bp%(j#q+9#fL^n0ZnUubX=G zd9H`!7d^V#7*MH%0b!L4m{{9@FAWVS($0W`Jq@rLVnF&h1NsCRFg}`avkjQE)PN!D z3Ae)lw`2pXj~Nhp)_`?a3>bIEfX8VDSY#M*=B)t@KO4|r41uR*2)5gX;6cF<9C8dn zmy#h^_)7@pln+7EiXlj;5&}2Z5KMFr!3xh1?C=V~ntCA!LqO};O6mVf?{SviC#GQtyy}PG zv^E57r4S_74M7Qd_db*dGbt~2QJx&G8iIY5La@p?1XIdUeo($Wqx=giM(^Pef>6rS zr*`C?kNhnt-Kr2AZVSv!cfF)W3-0K*y)!l%yRf%r}11>ljP^hQ@ z4GI|0&)R@7Dg(xT*5kLgdNg^VN3k?LZrs)*=87I}=kz#yT#u#)^pN-JQFfai6V~aG zyiAX*d3rcaCwY(3!&|RMy(xM)kI_RMN;=V3kLYfCNbU8wNqRB7z8)EMh>x2dV=C$~ zsOoX77@bN6qiX(OJXZx{-n$^wej0@Rw}Mdj zd=Qo&4g$9)2+h|AA!1PwjE)vR3Iky4@9>vfoRa2 z!jNWFa0|pQDJ{z8Z6_jCwO z)uH-H9bWCz;p7ggC)et5Vv!Cnrt45Og8X$lWR0QwU>&OT)*+*#4riJZ)<=g&wRLc+ zuEUt}I;0oZVR8W-s#%(PsaSrtqqI27N9t9rwse1tr&RfrM)IuHQc`dJO)B#sNQ%D{ zFF7w?Bz2#?Uee#&EfrdRNXmF~Mq2pjn&cbuP|CQOA&q$ZL3%e(Kn=+pci&s%>Kc1A zoKTonM2g{h;m>i7)aGYl`3Yw?MR2 z8FkF)-r5FFhVoo05&%!pptF|ZGsyY@$cn*(rd7Ja|XBJAWu z%uY$f$t#K2{vZ**W+dY1`$U)v(^1-TI!f40hgfJjZa7TG)?(8UQDQoVmYj}WL_^3v zgWMjFUoXPsv!9L(tLd;;PsivliEzrIIA0{f?_nau8;Ri0C!*QWM6^sI`^H4*79}Dr zHW3|kiMTr~5i7eTf;CBmk7pv9lu4v|AQ5%nC!pQ^1T;RKfa-e^P<(j;eu+&$`$-8n z(mw%_Z4Z!&Wy*ld-0flJ{~O&#v^TeJjSkyhk736S!_I>>*KLw zQaoOdjK_ij@z~rm9?qTO@u6ir$~TI~62xP0?RZS75s$N#;^9{=9#u=lql#lZx)zAX z)_n1BH;>0fJ{~hZ#bHEN9D2QqgWt0_j7*C|#JxDIy%~p7SK^RyAr7`@;!y5H9I73T zL#2IjD4Z0B$2;P%a&sJ-tc%0R6>-4gINY2YhxIe4jN`~HG7b)*aR>~GgY~pHY@8T} z!DHi4*FO#=hQ+~ZP#jeKVe6 zu_)7r!gZx^ZDLWbNi4c(V=<*xEaIwB9OYvXS|S!h3dT}DE*55dEcRx_p!f3_yuTlV zfNL@Mcs2(8kH%oX9E1F%BW>2kAZT$6R?dupF)9X!gJQ66LJT$xk3meo82J4f1D7^2 zxZ@jx=z1}z=0^U`F=#})2=*6}s8f!mBVe`u3MY&#w>_}At4H*LZeV; zN)**gQE1yg3JbeNfwhdn7N01L^^Ag5r6>$88HHK)QHT`@^EMLK(jrm$S|qe5BjLy* zv2{}D>BaziU62=CR=u|TjXUj&SYQabh5+V`yG6E5|BQWB0 z1Zv9>xW6s}qvu8-JuCwC$44Nje*{*ykHB`H2&{6Y=TZ@9m@fh^-iIULQ8+$d2uJVz z;n=h>9BK2yVI3Y0$8q7X?;DQH*5Np)35TvyI4U}XLl(o~oe_r3*TZ0UEDYVYhhgU8 zFzky8!_^5?SN03TwKicCCJYNIQvF#t3}yK+oOv3G;i;kcdLR^m8$MtsNzf07& z3!^@q2ldxZQXd)AXO22SeXZ>V>|1ESnlJ-Kk20WicLO&28c@NN`byMCIwBa5`9zO= z7xl20_25_PaXUtjP2=?#(VN?2 zksyrw8i-D5)W0|zh(>z?(UsaHU1T8kj0uEg&p-@q9Eh|UftXZ05YB4qe>@MsiPQib z-XDM)>jGduGXQ=80XRQ60DU?JppbU}9##&()gl3S#Rs73GaVwSpHSeS4#tf-#Lm?r zJVb}}qjdPtQ-=}MA1L6Z!!7CuT%kSyO%A~GN|My^;#MhZ{W_^=pOum^bE$OKZ;2GT zeu=c{!ZN8#>MAK{*9NKjm>p6#+hpnWs1uU=ipx^R68ELm%QB?OML$dBH>l8gtrf0L zv`4YRMet-)ak$2p#_GZ4vF}qw`1@2t#X4?ye#Zk{e)U2WtB1$7S{!UrAN@!8!ak@8 z%^x&}-_TYV)UYkpCmmp!)Cmu}c17mHZfMo3C+v>&Mzi95;n2N5#>Wpp;(WHd?qfzTpG{#VUb$osd96rQAOZ8=?rBokMJ$&6W4x`7%Vd%Cv?0Xysp=3NP zo5$nbxOikNiiiCXYUduu!`nIm;T01wykP>&dnRD$*aYm1NWiBB)J|?nz&VzHh?5CO zxI+DfdkMJyGyz)bE7bWw_Ak_i3W;d1NDNPv4< z0%qPyz=4YiIC?w*yW|8c-<*JjODVoYiZ3_;Q%5JDS)T;>w@Cnx1gNV}n@#QXQdI&v zWW;0RwRjj0$0K5MJjzh}9Ak*bwGr_s@M}EkHH=4}>hXv#8jmw#JY1f~VM%Hnd=F3? zxFHTzXU8ERI1WxDsEzFwhfa;-aF^P+p1;K5IJITYA7U~3VJvo>i^Wqp7LIFUQEz4} zItRsK`0!W+{z~mnqgX6(kHuQ2SnRTn#bIi9F5ip6)6+39ONv2-RWWFh7=y{W7;GC7 zgSVYy;L|V$b8EzaD;0xLRx!wY8x8%vXp}z_jmt^Vn6sMN2Wm6AP9M z8mDSSqip$T#1^17gp0 zQa2I}Do0{>u}FAXMdHBw2y{x1z?;+v%sm=`rn@2_tct+CnGpyLi9pA35vcrI1k5{8 z{qGxrGoBHUD@0&Z5vu#mBCzajIF>&Q$C^vw*m9Wa^Bv(hwIUq1XHZ>l2uD7W@$$cg zL)$4F-5Z5tQmt^zbq>dFhj8j!gd;sG3?E4stWv|^aFpuyU16xUDhyt;!q6}@3~k1T zq1S*gjOZMO;KpH?S33+lUBZy+7=|wvVW{*z6y4H8G5ty?E*%Sn)1FX_ToZ~EY7c5e zgksU8P!t^!iUr+5QLRNNPG~|gx>_hIJB8x8T_}>dP%M5Kg4nw>=08t!4+le#MD4?q z6(OiRi^lC?A-Fw}<}HTMTnEi1Ol%c`ir(b!7J~gW=3ieV1RH2f@wY_7%Mvj!>1XA)dpjZCyk}61fx_L;^z>I z(>B4_EmHXRGzNYVgdGopka8^uPpR!Ha+Jo=au6c71>y3VAXHr(gy@+;cpnvnVZlLo zPGjl`BZFv8G6?H?1ff%hAXqmK!f~GVmi4ju}`iljh%+8T&1YXc!K2}GqiftVjhWACs)%%O32x$%M6 zK0FXDehb929)U>gNaO65fq36A5IZz9CikGWv}z!V(KtM_1l8+>0+F0A5SvwjSp6vg zt1|yxCID|d09F;U4%?nnoBT+Jl-oMoyP|_|UI*tC9oiq#Axzfc;7%PZHtW!KjSkC} z>hO6U&56#?;ZTeYHN$jRLvy4qlc_DIF@BxlI-DAy!$3bBth?#3y@L+@ThSQ5i4Heu zyuZAj4x>GFXzEIFR3c0{nj0vo!(#^>9^}{Ip*779sI%LD>ng5NE%OG_>Rp|sRwIT= z)*E%w+te`W*2y?&+m>0yTqo*uE5L;)Byt+>LY6lMNT8t6fqh;nr1YE^bJ7Cf|~5XWfx{#NU%Fhdz*6RD2}) z9Zi#hn?07EZG9r83eTizUeBdcU0z7f{isjT`K4r6=aqEP^0l<<=xgcaxJ)U@@r~4O z-5cqZ`&;SUrngeHa#@m3OqSH>b(S=~%{$3{?K`O{|6c0V;k^{O>b+$3>Ah6A%?Ih> zst?jG)ko=7?~jss(nm=s_(^)z|C5xqlkV!z(l2d3OZwTLrK-0+OBKs}k;44GNZl8G zk+xm?A}uWRRjShLt2A`lS82rNuafVbuhKMg4joEzsO-kU%9q23&K!in^gNlvIYH2Ha4FUrHJ43EJR(AP*hlf$6VD@l z7LNrBc%&`kF?KDFHd}b;cJs)$kH_buJi46aQRym=arbyMe#V18nbKUNkh}XR^zUz= zP9bON7?K;Z{Zcg4QPh&VH{bZqMDo-sATo`8XvNZpx4K-GzI|DwRl1Yp>Yc-p?8<)9My|Poq}8nxQ+#yU{l@YSG)99(mrb6fHMueeAg3Ey{uzF(KL350;eW zF^)?U6n-lHyERTeF~3M_U8TSAw4l{At)S*gaPIsZ3PbVImpp2^+}*7ltojzEWSA2( z6|HU33L7`e;&wIVE1get&!DZt2Q6<`8$ipNU9Ie$X?2a(*j&nP@}yPIg0&s(mvLNj zfmKD)D0)lIqs(M}gqXlj5hw7`#f)bajeEI&z1FSd#=ES}=4iA(wX;(6Xp+`v21 z7h{!07l&hfs_>cT#QpqvK_#fgGyF~A4gW#tQovRiFEkgn31-4bp}mkK6cVNi4TTND zV_QG^Qfq}UTKJXRHjwLYLOEfPFhqD|r4e`Xy+l!{BW~pTh}MEuH1gfWPkc$MIB^ZX zMtsIci%a@iT=lBY$ z)x5hZm9MDU!q-rp;w{X~1#h#BqKCzHv89E%;70kSe6e)UGS)1GzVzx#l07k1*jV+wi`MCmz^T9Ie8IK9(8WxN zU7%8S7u~5uZRlIL(1M+dPcH0Ic7#Lc;*nO93rAX&$QNm~%R16(ghM0=fSu{fD~sRL ze9)4F;ZJexvi_^fBD=r3B_q#y;8lI38OFgf<$@k$s|xIg0+Tn;JWe#aBf?41JSrc;!j z<4U)r_t9mi=}-Jky9pG$iiqbL-}wW7hUYn@Zcy;b-NfI-J3AfO&)Iloty>`_o}4sg z`zyN@{@|~;QF;7{{*3?j9)!!`Z@Tl8K7n>iisY`mtD4A+7TL||Zb4*8WTm8q@{?*i zp0GS&dBXB)aw9BHSo&0xqmMN?p0I*)5mq3qKv;pW0`V0HD-c#7tUy?Sup)65DGefF zMZ$`N6$vX6RwS%QSdp+IVHLAT6iA-3Ys};e^v>Vxy8{2PD;R}x@HuwvJjx#;#pL9b zV&7m+{P?@Y-nl45e$AS5F@oa82{D5Es5xG)V`kOibbnk*Y3OS6^iAbadRLAsZQ55t z7GCu?COhSdFGs#=wb^$@ttKau2gN9X)n@e50N)u43o{eqn>QWjZcV>U_non}v@lax zn1Y*GSm&c7V81su`K%QHl?*YrpdZ?y2@|75;NFZa6^D8ifzBYZP|4<%2v z$&lr55Q=ZM9;wxT10ZiRb94If2Mcp^v;PE`ye;V58!IbIi~j^D-sDT?z2&pECd6Mk zD9p**q-r(Vd#a>_06NPg634iXBC>Ywq$i4eU$}^|^IbI2) z(4X-+ZGTQ&+5QTS)6yT2f=`CR|L^-Siofm~UT4BzUYhYc{y+OL+41M3Bm1s1;s3r5 z^Pl{cFgfjV&OPTna`^rAZvNlWBT#ZBC+GfLO5c~xAG!Y5R8jChnSbV|@W|nlb5}~p zlsifZe4{_H`(281awjLPgrcxHrJKVq`8z)U%`26bCgCz-R!v1*(0G$MOaEIz55)a?A!f~Gvfu?Z<{9e<-UGZ(LUJL)c0&gyu4}5 zM6(uTN)z>^j=R7q{=>+B82R_5ozFcLZ#thu*_Uli{@J4v#Vy->XmBzml5(kW{cm@l z?3^g=txTp^5GW@-O5#e>cT~U8;6OB;9KvzR2SOe)l0B+ufDtC2f_*bz9C(m#?VZQf4#SMEc>{fFJrw`4aX2gxU%%Ek$YH(+az2)XHp-STuX zfEC*3pxyWJHuSU9?A4@^vaAh}5q1^Q{k!t0yXE9kN4GK0E#^CsEIk7k_1qfh-G5EPW zXo`)TMVJJ_WF8qKZCG-OrDo<1^XNhrCid>mmiojSH~4RrLzW%Ib*YE!v!k`9&D6`R z)npg#lvdBsdWb*UHb~Y;@Ak`O4;;i?m(ud3BU;VD&zISOk1pC5&7Z+%qCYDoGEKo( z`{k}j4q{Em(sE{NZ;jon%k1FmY|Qo6?O3PM=}8J^edA|X!^vhNd| zYmg}qrelDb<2>86z*#$S{Xz7elpyCDGgUS}UQ%9Ra|AQmoRp6*_1Uv{*-19(W(Dn} zMe8xIOX}e68Cw{(b!tlM07~lBrGhy-tti?F(L1X!}39?y_{jzG^Jy^9(k(;_) zF|Hq*%x0^cwf`2zW`A~E)iNf@^?PNE2FD3o?D? zO8I4xhmd~DkUy?HBp(@elHD5u?Z{)t5i{}5-sh(avai!t$^~jZMAOzU!((z@c5Q=;7yt|YuGvI zDCuUwnfDM|$c=4ES!JvcyGd?5{02T&IV8K3a+1G}jbwgR?X|t0rNV1*fZV9iUHQ{5 zd*olOo?@i=Te%y<#E++pzD%o+5N#jd2>U1R({?)tWLU(S@%@zNk@M< zwcjUsddhuFN|_;7oA+9?y~08^;jOuL)vimZvh$9tU}hhPl-2i-nlPWYtVyci6J^3I z_q&41!Rhk3eBGuwXg9TYrYx<&ot%JPR zo}t{(O>$sL3#tB{dF)C8uN`u$ls4&kZI&7B!{%;TB&(7S;>Dc4vfa6o(w&BL+37=~ zw(kCHOtoS@Y)r^v6UOVMpFDSP2@|H)by0it@Rjk6s61l^qK1LkIFmc2uP4iku<*MQPu=NwJeDbVY&phVNVY0 zlN3zy^IO;&v{P0vEv;v?p1Sd(7vm(dEJ+oQ|Yl>_ta^l>#Jof zJj+qLaQ{7A?oo@?bq_F>eU~J6>UbAky;J1zZugC=`YmAt+B<4@C4I#3+v8d1X5`&b}?JK@_gf^+iTguE5)?IThHU|kYIM?!G6ha(h|A5 z>wOgReJ*?M94v>7tKzY7Awa!9J1h6oSI`RwON#Cs_;?oiPez$^XZ5@dZ1OT^EzRR`*ScMkF7u61y!w1;Li!5H zhrZdV=<*DoMzvz?4^=f5YSmiavgHvLwkghDS&cJpA6JRFWnQO!>JQLDJy(8R=Y#yJ zZZ|pP{#z8-pmLE%=~iBH0^F|wUBXyaiMW_X$;ZR*m^gxN9C zQG34K0(LlGVR@{jPBI^mgrgT~v(15DHEG9NvnE4RksHj%{ROpiQs%N9)At(7N0pFz z8X3$MRA5V*cQKBg)qpK3l8z#yK0?9R_YaU(Z(m?kF!qfv%eQ8hkrhm>g>Q3(Su^q@ z%umf_qeliv2QB9tOQtdirBdZWbee(ld`8vcGgz~E4W!byKkkiwcNyK@ zS7njc0*qWYf$eT~%!E1PFoX3A$j0=_x{R-HvoRjM1a`i~F@#0EL51ZbSg6nDdXM@a z)U24a0&Of#$R7_xB|RNnjhPL-LVI!3QTviNEBqwd7#n75Eb;OP7Q8oO6&DZFv?jF%(fVZ&1)~G-Ftwoi;A$MZl3b4q=D?i1-16y!gRd*8kOd@VMUs6HrCwHUfy{7 z0nQ{8VWX>h$`3aUWcg34wTkZCofpd*yRVlN-LYtO4+UfFOuEy&LvgAq5`U zz_OtWV)k#B>^tw4mgeWUi-}j!p+ix&V#!V8(UGI%=WkMRzSLuxd$rrRc}Yz+KH~wb zztZV#c7>!{ycerIXq=oC_Yl3B*s;bR7mKpg9CGi#CbpnHN&|as%UXe~QnHB+9*gCnpIfjhQ`M*ov>WpW<^q8PA{Ji>j>-%AM}6GA?)ZV&f}3!i?9?@TPBTHl}QCW0@rnjTSBkFf;3% zoY207ah2SJy>Ida=_{|G_$x=Y``J0;7q390Zu%bRjvSMP;sZ5Js}5%;TV!C-l#>XZ z&zUe2nk|*(2G>lO%M0de#@LPiS1}JN-a_FbR_xN-*7E&rBjsm9QlY()Ca>@5CVM^f zV_~;M?Tw&pO#IBooGEfht!RtBJR;r=k_>U$LFs3?t-PeN$0u zWV&q8K$6ej_hVz`tF(&loC=-B{0m=}6x~U9c@gvrKC+@a)5ca}_cz`(ow}9aR|>1l z?V+5wbz<=$X)K+(HEBy47P6-7?V1Zo4@O7JP9Lvh*0=|9-_cWyJ@$-b1N(B?&Pg{A zzo({b-PD#@*IX(uc`s-Ko7Z8(AFVR3IMR$Y_0Pc5_L*pXxdYQA&M-D^5iP&)e}%fN zB-^s$?h7}GrtVvy>V+_zCjsCm+i%qqF4-dD4jo z#(kqBSW;TPTw%gI-eUTRY0N=2S97X>rEE9s2rg8+B40?DVl0z1igkX#X%$TW1Jl@o z{c}v10{%yEN6N-b?>dUTN#V4rdYN!G8_Ck{SZKP=xNl56n}pq^_sD~|(MG=+W7r%I zUc0i;OKcs`mpNXst2eniC$FND7w#0;Cp!;R8J8anU|FvPZSfDB_Mr5UVb{VmeQ8WD2pst35TOU;fs zd&*^Mg)`f!_Wv3t|C)5z)StmJ`fQOrD6TAutNm^@^S|LCU#=R?4ve-p>CT5MJ6OZI zZcub*w$DX$xwKhUbmzgjHY|PIYtzX-OFO)hT-Vh_^&88ie8O6(5Y0$kY*q1Yf7;DbK*4vcC}-MEw_;y%z{=n+T%lFSw-ii#@a3Pn!9F)F=%HA=HL>i`MkCr z$=Piz{`>(7rv8M=(()ujl7hK;*_@4auVhp(bDUrNYnaPrKH?YiSk}6Xv$Vr0d3WH7 z6W}}?Sn2Ne_4@d`vT=@=pdSc9I1?|=4`JK9 zL+kk`F3=nrwE}LV_sM}SMKx9DHe+p7cj!C0XE^>_JJwBWZmho7$7t?Pr}pfk6F@Jm z(j>3-W8;oKMDomQDAnp0W+!emHkjB|t~cTy9(mida;ZI}i|<0&*^ogE1r$1 z9oJPZHYyvVJJ~}D$oh9N7BlbQP0w=d+=#bEOzR`BWA_lc(3Z6t<1X+0G?oRwwa_L_ z&c+l@$uxFa(c6UCU)YY_KdLcdjB_n>g)t*Oy?U2pUAJc%T~_y&+frOz3fZxpr!=zb zm$7WzJWH*jJ3G(%vr100B}I2854nT7do4`5Gd8&fvwVK<+dR8+#ztS-IHIB*bIR;< zU)o8cOinj%(ysNG^|Yyi{1u~|Tj5zsnNiL*%DEL4zI#?&y_(N+HIL!AV_dJt)H&vs z?4Wfy(|!qBTT&*pbuRR1rfdjNrsv;zlSNB*BAOXDEv=m79?}eTs_DNQf12!prvGld zmhA61I_HhRKjTxD4kVv$SC-pN|83|P@2T{^1J|EijNDM$vfLT6=Y~%zEd``n3>U_! zms&R9T~yW<_}$Q_@Bs!Ns+C{-7%N^*(fL@R%;kl5Qw;YDG{C_!sp`;HfFA|(e> zJ!PNR@9L(g;CP>GHB?p~Iqi7$TymUsxhc78GD_Yk@NWh1kMP6d z1>u6~C@uVrkPDPg)?c6h^(9B#}JpAVuDlYu^ ziX*N+x~hmjzAjRVesq~qtEBk9dYQ%j@XBrO)m1s0oiIOSnPRiku7+c7bFZ%I$CtC& zkFOKvKfVspkKz63N}-=({n544?#EXR#~)w0&AtCGdw(Z||F^kULM$PcSLIgreyq1j ziTwEbvEC{*$&W83wRyS9tA2dt^1CdZD^~xRc=e; zubKD#Mc;7J zl^4pbtSG;usZ?3N5GlIlK%~fcHKN?giozo=q{N>WQqrCm%1fP+lV?i4{Z}b3bxKZI zDdqKFrQFJj^7Td=B1JA0yP_X-1UuJ~D7Uhrgv$#l@#lr|qEk8VotO0IrB2DoZza$F ztE7}wUMRP+^5rYfDP%Dyo4$UfZ+W(JCb!(mN)C_zse4Y^|EKOsp5=v<{LTyIHQ#e9 zD^9esrO-lJ9aktu;JDL#wp(sxC5OlV)IBHd|5JA*&+bqn(w)lm1?vO{gh_S zYCCb9ffg`VQ3LEljbQMW+_ymrkGzl)e_lvQdtOL+@4S$bXL%tdzw<&$S>=UtD=U+z zt&1XRO%z9@wBO2N`Z1FA+}0}!kGzl)e_lvQdtOL+@4S$bXL%tdzw<&$S>=U#QT*8p z4Jxwz^Wy$j^RISa9lkpK-`T7TP1g;-Dx7H(yD2+W~H@FE~e`k&{0cAk!e*rb+UP~r8b{7 zzs@PSy^g-J)~b`ulC6^S>Fl+R+H$(KoTyVJ6E~ejaz4&ZS0K44S0PzcP&x~pRk9sd zkaN_Q*VfRfbmWq3rL)l%(mCo%C09wt3N9zjmSp?qG_R!nb07H`{8?@q=gT>9&a~#E z;l25Sd;ke_RXT{sk@kMg;n(w#yudG@AG-3UpRh{fO7Skd4IjewCb6qZ$8h=Z;rtSQ zHb0U-#m%9E#@cgFxsrTM-kmSPFXJY1-HE#&zn#Cy-{!aQ`S_FEa!${cBeBVzR{L=( zyU;s){QC9lMxyydXNfY1J`<4_M{GC`B1L$vk=qHPG@^GziXmr{QL3Z@L=VaB0MRL; z$3)-b%8|c0(Q|UYMfB{O{};L|hP*gxnJDu)?may}Ai7GFPV|Q86Om#{lfNC2Vt+;S zgy=QV2O`Cg7gv!;Q9H#b@1vwy!73OfKE<6{v2UuOyyZWaq_PoGIk?Y`N>MTm)UyTt zC!qvE6jiF+MpBw9&6VXUaPD-~$#v4cir-(kjqCd`U&Z|N@+;_cH`=0DWIRbDa_to`hyw&a|dNq_wEwyr}}+!-}g0$&YQe_@{_T*&kZtrOPw-8 zRd~`)OS1j7XtQ~ehsoSirfy7vPNH5XdsP3k^we(My0vd><=x6t1^9c;{fC315(B**~<3C-LQY)|d`35l^_s2EfBq6y8Ma;i5$}AIw5`MN0@$JN~+`_*tTPS@BB~51L zr751j=K3FP!9XsW+rS;?9&lec2fjM*%XjBT@nQTzs>V)GHTH(L5=sj-g(gA|VU!Rm z%o8>XhlH!bbJ8dWv9h>`yTRG=b$CBMgkQs_@XvS~p^DH{7$E3{B?1$!30Xn`v6|RK z>?=+aXN%j!Q(`(PV@XvlRU6eH)g0~)=SZ=Rpz3)ye~tgh7ZYmH>6asf2s-gHnPPe^ zSc~PvdSZKVuoy@jHi<{X8)Bwtr7ErRP~G5a@l*LE{x$C`bfP#nQ;aIw+}2hcFD?-G ziw_A`Rn=PMuS!&HS6x=UQ#q==XlLaF^=$QS^%b=TovOK7NTs)_EVdRS#lzxf(OvbM zYK|&J^;uO_-Ax@qxJT-OW?Hi$W;4wWm_0XhH1{zdVm`y1nWvju3L(Nvp{2M~d?|XV zrm7f)@>2V&SF3MP7+`CRkE<{9S2Eb3bf zu}HK?vbblF+j4Hjb*0~B96|j@1NFh?aVxnkvb+rE{5dBBm8zm@my&;_0&- zz8T+<@68Y4$MJ!D6hDh!${V-@ZV9)UOQucRx48_`qWpXrYWN!P9r)k)@gy;G_;tLI zKTR_8iWh~#LIt5V$-%F}P+^)7D-7qtxy9TLlC&G#3sS=T{4abBYJywyz4+n$6l!?q z($?dh{2~4Vf0uv3f99=)qQs-7;3KpWx(o9utv69$a96~a;Mm$DxDv~_cQ*~C2Qbkkv1F9RUES0^wqS}W-k5=cloL#vl+^=*( z?szVki{WO|2K;s0b}H#Z+)3^Nca6JCrJcdO7#~Go6f8)yUmJbop0kCOPq{2Bf#e~&`Hq3!qP zf<2X^jy@K+Pu(+TD(4;~e^DfRyC{~Mdhs464p?dFG6{-sW?=Op?c?x_(II5sz|8bs>!Mus!gh6s=KNW zssdC>T6IVDP<5bs0CghM_>v@x6NIJ0af-8mSX1mEjuzvILyGuF6jUWto~l+<$4nz0 z>s1F;S5+A#DaF*))b(>+&fwZ|eW(i>NZP!RTTkV6jJw3$qZ0c2YVi zAMZ~!WCUsPGJZ2@=yCos<+&dhMB$Wjdcb|48oUgZeq+8XKa`(FCA5^J^)TVm`1hoT zC8$Q%2rY%4R4eOfd*Twx@$S^IUC!;}u2PKVd^?WyzJfgersw2{*Ffd9%n3N@(K@DnCdJgcZ& zF9}bnZZ0ZT7aNLQ#Sx-`^lg)PNE|`>xQj~a6`xNiPq{ssbeRcv1vAk_Y(`oYO&WY! z%ngd0>t)D?ddW5r$KE$Sy$R5e!( zQ^ivGo}rSlRaaFvRsW_ARxeT~sZ-Uj)i!1>X3Z%4OWvJox1}T{DzOID1;M1rXQ*Xz zPCAy_cdD#*+Z5VOSVENJCSv=g_ICk zLPfR|m82v?tB5Ef3dxdGDrKqozs|k$F=H@uYrel<|F55W=FI2wx%X`MJkNQa=bU?= z_kll3Q$jcW5#H;6UEi*Mrz?it@mxi!4Pw0ELOklc8=Bs_UL62GsUDo;U%yhKeOBUg_?3t92=QhQOQ5)!`|dgFd* zld2SjEAK;YJRv_PzeaiAkuF{-gB)(F^j02$o0ceVGS2qFCx0qlUTrM_EgPw=)ozTr z(P|-b&qD71BFDqSohWgEvR>J%oK^yGN^P|bJoPB@{xu}QSLkqEi_=PKHL*?Z(*|je zYBjNjoWtB*X!ee1?7ryiN1)bJrnAqXd28d& zF*VjO>ZZd?dz)*n&Tx%|rBi1+^|RwW~UaF*hCC>lHPQw#}1w!X2fQ zJCWV<(Xj_forIRY6BQ#>DGQ!r7VsjyvQhqoF?v}35vp{8$ChDD9KZ=MfR?F_1=m%67&<@8 z`20ZLi{8C}om7x<+(2mqWk-Mq{VW>eUF76Z#m5}uHXO@_GX58$B@U4~4}IQ(l;aqi zYq8o+FkR21mPha2t3HfWUZTFkOYJA2T)g(PbPIV`V#j%~1lmBUXR-7Su>h5q(RjBy z0Li};yMG^Y*o#iDp|#Q;fX=hDmrYH3P%6jr%~I}1gHu{64>6wCDqkQELd+T(sGXto zboE6_*o(H;wFLA>J*|z&D^F=lY}2{4R1r$o=Dm@oQY&olPV7POAhy*ImY~K-kD;}n zhVBcc<0U-;FKLi8g7i}una?8y-XPs4xMd#3hCa`P zIzmoD23Nw4ZVJ`Aa%UqL(=!;+HLwr5Ap0Ldip)UKLhJ87Td2V zTB0f?G?H6TMrXMPr3{h#N{=FYUY0hP_Wn=sh!0s%jFDYeZixhW5SouiZ!f^AUW=sP z!I-s1w_nMF-F04yB6SVgb&vc2y!bSn^bV=Mkx$d}QS4t(0Xg3si~T`l>Z8cV zNQ4c@kk63)N8yk&%(I*(mGd&XOEJEyk)r`LX@#ZN5q^0pOzK}!rXE%v$4VI^|@U1s>ZkmJXgp`B$d&Z!(n3Y3H=+F&`3M3=mVt~|tSz{{#Z z1>|>YXf{ll%(}q}Z19iKywDbVDFREplv+(aDwUGE!5#0)-$SJeN-L#5@?r(j{t&aW z2f++BkEbz!}>vKEd?zdfixM8y|E1q9ZCM?SY#8hP}eD+!6Awo zM=fOXslM?nG}3xjhkTJ;S(qnK7Bh*xi9f{syi2 zi)n#*u#OVw$rAK=b@^7>SeIE@A4cOe#__Ar{Zn-1Nye}fnigaPX4vYZkfpP+E?+~d zeu6v|w$Vk|lG~G^)hoz=9Z>5hxFT%n*P@2Iv2^-enw>4nGCS)Ce=Wr>ur%~daKi1R zAB-MffChgbd3b_3cR26@91ok8*hb{N~%uYmyr@KEd0Ao4ZT4*p!}sI zs8z6{gob_rIll*+-KFKnhHB0XX#}e_%e6FZmv%rZ3pXxiG%HF8s60@aL7kr~zhJu; z#~SFsj815Z4e6R97Avl{b|)(;Be3Kb+NQH5w^P#Pb{j@?SZT!-sJ0EceF*OQ70X+f{qRgaq(B*F)+usBG;nKd>h4f~Fmii5a{DD@ z%XW11kMM|>xj<2L#I2<3z=$6rkHzW}^Y=Fxb=&3rSO(zdGJB6hDxZ@gNnM@s-wsPebK#tYplA4lknvH!{om3`!rthWp)IYdMCUUILzI4M&V%hV%+E zK5Ml%FBGoJY`r@x7!#RQFGDMTguXq(O028~SW7F8&OCyC?uvfh#Ei^Ojuz19anio0 ze9ek)KrN!yWK{QL&G#vE>f6l4zhN!Sfdy9ro2;o8qNPL8DqERjhRELx`)@opz?2@ zFO`_(J;5CRh!)VRv8M2Z{)T=~cNyi4cE%XvMdLH$594>K3;i#{#lxAy98=J9WB`eglO{ZsuH){ZM0cNl|=>d@t8WZid4Wi;3(Rtak( z(cWNPqKMvJpQeAHpVLbi?TsglcUYNDax`%ab1ZZ0c4*FW&i2kp&O7KiRcokC&^Br3 zwA=OP^`G@yj7N>_MwFv9>&g2aiL6G?cJ6jYxSF~ib!~K=cU5pd;C|k{*B$iK_xz^3 z%sxz?YPYfWQP`Mh95ZS=o_3sYRC7M+-04hk-RD~BI_WCy?&DtR{?T2+bH8Vy=W9=_ zx4CzMH_dy-n}EK(M?0Y1t-r6AGNu?Oje3qbjvpK~XxlDlURO8Q3fC!W9OQo8{hPaj zr=RC#&v%}iydAx>ygR%upWP=i)`J!CT$-1+{^1juzgL%4x?oB3oa+?D_6^Z)nqu6)W^m-`gY<`DAX9!Q}lh)g81c~9eJ60{(Th<3{mY3nOi z9LuMOpK6kHkf;B4%b?oJ4$+QPykhcq+R=kLYce#;8Pl$&qip38|YncNudQ2qa2@~~RU33;c5T%QGs zv4l^xgO0!1{dOzqq1DvO8)KY9Jp)1wqV47?ANN6gnWQtxB9uwWU9OyfIJz;z%?RPT z{$8#abEL4`WbVtFTC16HQ7x`zJ^Qi$qFUeWM2ZW>%@OJ&$e_B8gWZ0({0*_|@0ZyHC2zoQ%dVD-oGbUB&sNuPp#gm!kzDBdx8bZhZb%_QMT2|KH%> z8+5)wXWoQIhKskarIZ_T`@fqXZj9&uZu;3Be>doSgU&bP_VvR9H^%ezL(A-BxOiL{ z$5S0v8u`Yf1>rXtm&9YYEWVUk&xwrrUd@#8iW7@?@RaXW3f5X!MGJE-{Q+L8bR*p8 zfq%aTvg1*h_Qr9e2mbXQC_oE@q?P4M$Ou6x8Q_7Gi??6wc(KpLQ8}j&!udM`H|lh$ zu88+7I3XU6^9{Lw>5LIRV|sqK!Y4hPrl7f5i#QW5#yoK!=w#s&ruTg26J{aeM7WUD zOJ~9rwdD0)NxH8YWjMs@?6se73&?@%IoRz7fKRULV7DJ&mh1WukD0A;kv>Q>Sx}d~ z0(IFVKfAd?Km*t175z^LUz;O&!{SUMxh?OSY*;J?Wk;HknvyXv&G)bBgd32D_d240 zF3CQ`fa4o`MG$9Wu98!v6>u~0=|OzAa$7mBmM8oAFTWaTwm1&3nx@=Ld1Pr>sT`l- z(xZTM5oxRtqI0eltQ1z;qRdngS<;4ohwnao&n56`5up^Jq*UTkD9JDDT;{XldU4=( z3e)CfDLt+YwdL~u(yy;R-28!=L>Q4}6WV)R%eNSrTY2CHX8KUpE%7h*&eGedFuq!fKp zo-tLKP>E2{?Avf!t5js(TgG!F#AFDR1q^+JtcZ6KX;W6K1?Rsm8=62 z-eX^j&lC414N5AO;u;JAOPf2jWn|2qE# z|2=`~!FPg{Lr;Z)nlsBSXME&4|;QPVz!FBGP?(f{1r;z7% z&m*2Sp7Zz^Oanz=x&Ds6Q~y>!rT+#V!FT#TeT%+{@Co0JbM{yLcl}R15t2cmdDz%s z1RdKPkK-4x!m-%VBhnMOETU<|&V;)X28HenH45DpYR><%AtkgS_+W5NT=}?nWBbNd zi;YFF{}gjL=F6DHSAF_st|I_Q~a^m9BBs24cp zpY5;bKjd5F8|C}L_qp$D-!b3IzPY}qd@X%FeX+jn-kILs-n+bwy$y*?h_`xc5W9F6 zcz^UZ^tJLm@4M)W_q+THe5HK{yw$wRJs*3Hcy@UXcuuk(;yZXDtn~clY3!Yb4}#&V z=3h+))3?c&?C;{A@89k}?@tJn4^$_{!gEXg9sRQZl<&OH>DT`g6{>rp<5$MM6=(bubI)rsA2?+@A2DsQGXIdh@tu@eWE@=pF|w34+fWLfIf)N zq52U0A-%8up#Ff~oiJ3Ns;|(uLEm$FeoEp$tyMnj{wG0*tOIAauY+~au2G0X9U<59;V$0y(x{pR@H@gv?JX^z>B?v9#{Scl(H z*>S7mK1XlI636$B^3MC6Go9<5Upvn^yEv;jE4cD`KJz@_EkticdjIfz>RIX;?dgKQ z#~q$Jp38GHySeAOx8f&q z&V9ta!ad1d$erezZ?ds|pizmrG*B`DF_bB&T{7*KyzjXiVj`S4uJm^V-_x;}E zo<}`Dc;dV_dz*RNdE0s$c=K~^zNd(Hz2_NP^p?lx{nfJv?~|JNpWF_`YkQ}7y}m8J z)X@3FB=;Y#MXuql2CjOpVy@z@hJ?QSUO>GwUAFp17(jyoJtj^d6ojub}~P@$$f_BjeW`#Ilo zo^~d>T&};Ie%D3kdFQ9j@~($nyIpzREeXB2$BEqkaCZlHNw>?r(KXUFkT%S4edMa) z9_#+zo!@hpr<4ZK>rg*V=SEdOg#32&mnA@8fK`DMz4xpQyFBV)%fARB)tfN!ZN&ZMOcPs;R@3y ze6`t9(ON4A+h-*yo|D|NN}m;?x1KS*5rs}KVcG)14iLIMY#CKG?JZHSWvd7qKztK+ zmC*ea)2#r@h7wj*IkdKQ3r#8>Fkg`g|UfwQK;<4+Q& zf`B7JxrwLM@Ts? z-9vPS>DfPfP6#9X;F5tnR6&-A0m~&r|1T)y5N1>8L#IK;Ec2*uP95E`g8`p{uDv{7X3Vv{+`8uOWr)reNQs`)9Tkp>B~pCw?VY9 zH)Y;u`do{e1m6td?uXLmhqykNZzJiK@$}#rv&SAHM+efkH~)8}#cicFY)X6=ExUuz zn&0d2hgIPr_ex_JenF|iJ(;qL_iI#r{ z^uf-5u@YjHDD&;w>xzw-id92M6hUO>H&-LAT-mQiiV0eF;Z{n`E{KU-cEOswT>HN@ z#klr=F+IsHgeNW6`piloWVO|ujvNS-nzsMSzq*%bp=3)7NtvcyD<-Fxp~#mg!Y!o~k) z@~n+CheqaBn#q3`zKxu`!DzlX#7hn0He^RKzpgD0B*fz|RF422S_xdt8Z)j%ZLY)cTMvB9 z2B0d0D&2@dC&GJ#_X!`EK|#x#sVQT9yo%Dpl3@!rj+2yY~Ux>0QB`CL4ZN71ukv_@KGP&?!FBeug`&h*hAO{ z*vtXKA>v_zB=rGYv77P)pcC%^`uGJfG24K9nE({zeBc9?;bi|7;4dEmHM0Zoz%KxX z+Xp1UVZgvn0$M9cTjWK+3zRp3+eQIWG8<@_+W;FV4V*+nwH06h-Ayo|;lR2*#`S50 z8R|3YEFdbDA->&!V9f&-OaQ-G`JV?4U={Ec>wpk=7Z8ihz&vgP2yiEG7P|p7*$d#z ze!%6vCP>n7xiSEB1^;1wyLA2p71t8uqL?I}tm!PLip6ZP;3<|YgOXqJNvuNPu;?}S zlyzZXyFdiDf+5Y3F8~TO7y}VMUCt(AQdY%SEM+b%i6t^&aEoOtv6yHrVvEwnVyajM zm6Ue!F7lV6bV)K;*s22OHN!xzhsqPW;bzR%(xxFR4AesD3rTs=Qevs|2jyK9>KM|9 z`VG$2!!((S>Aci5Bqm`T4aGPRQ<8g4W2H69{w~nmTd@FHUs|eGQ0~DnsmYy+O~eXf z6pX+$+zrUaI_~Tx=~>ex5vJBKOp5^+2fZn+3x`90S!c%4Xm- z_S33=a)iZ_BL}gR`oDZ6b2FB7zPg?&n|>YGSiYHZh|g;ue>c6*4sAzfQWru_wjG&S ze~CA&vueH}bpRa$2Sdx69~Lz8BRKNDen6(7^~&O+{>{s|5mwBJ1Is&(N$_uSE24=0neNWWIK_?^%_yoaM+;oF3+w zoM>3oI>N~_?1`)2Mqyuad`zUv?p+toa%9~&I62F~!uVy!Wt%|rBQndu($i&!?c0bf zS-4=L@1NdAmR3ZT%yMM8>%s-I9En+utleVwHY^@c?A}HemidqW%*vy7ZzJ72w0j%Z zv?l+DE@YLapbdrvOZEaUN=jx%{s{B_fhh1EtSq!cY1hIisE7d|jEMj4>*0=Z$U<|Z z*6Nn^#5Z<1fb0Sp!>+`>2vlH32v?GmsACfrafFlSB6*t&kjwy>b?4yIn_U)#vUc=_z%nyT25rc6O`MEPaS;veaH* z<+4-GW~s8WKhT?dxfoa?l~%tCd@jYR`vb+~RL)nBJ$$!QPEEO_w#7M7*{Q|4=FvZH z*I3!Fb@qHJ&(RBb{*qtRVr=%$U7#MaSDD;ak)@{K?ZH~$8%xqtU?z%w%cqF_Zv_7+ z1}98I_e%cJ%)?H~6!Q?qu*H+tF7sI?F5zG&eHW%Q;b5mFmZ>O)OKQ=K;bJb+Tz0}v zSroz{%Br|8Q&~cmRor*U`b^=??1J6iE37Tjw>Um?ZuPYYz8Pz`_x@B0YuSZGdiG(9 zBm3}~GyAaBmwjl#8z$L>H)FF8c6;vz?_G@t|8DP%Q<`Zbbi2IwZ;#w@>^6{HXr^T! zM(EjxaPQ?LV}(475xdDL+Z}NG!~|Z9f}G&F#XC6#h~foG5T$vVE}k@7`)VIg zpTMSr_g(XiuY#n%S`=m5iK718MA7!#L~-A_iK5SP6GeaLCbE3Y)6IV#?ea=X>KIIH zKol>V#Sp`MW0zN6AkWpJDBDgH_2(vvw&x~_`_4@ieU_Uj`a3rhu ztV66p6#XWg8^otwURh4st3^?^oha(hO%!d#2c6mkQzgiS!+lg1p`*+TT+x~BTiayIt4EOiH^=X$^rYIn@AiNf+ zRxHl%?bx&;+T|6I|7uZ`Z6{tW@83BWZu`IWDf%ooG2Gw()~8)wLHtQ4Sv9MYPm;#- z0P`>pGV7oO7iso+MU;`7L)4#}DB7NzDDFEqQS@1EqUi73L_w?EM7z9#_`vy1;yrC% zuOMzBMiYgtW>>C=GIA3|{ke&v?YW8KzH<{rpXDZs{?1Lzja@DBb|P928elr>9r2W_ zy?$`f0Txv3#e9GFQ_L}~RZNsuHsy2i%40RBL}tU`=G(O$Y0~60B~5HM=ty&>dhxAj zp3;t2##Kp6(bF8Mt`uKtoYY!wouZ_usTv*(F3FSXPm4*ZCf%8;n5m33H)|guDNkzo zl-ngWMN8Gwj1*^@R|=#?q{OEdN>eGzNOh*UQ-W!cDe-9qQp%=kspgqfpA?l6mzp=F zWLmAowA5w3a|tF2zC~ITJA4z#=o;4lY|pe9y}k* z$Ub>C9-*zJhU}X8D$YCm*)=*KZ)e$JymS*|RUJiQPlS*Q5?x!4-m!opNZcSe8i5|C(Q(O~eiL~d5;rh^G zW*_DB)R^shxql~h=EKEBOw=ug7h>_+Jj+|i!Uw``CCPaIRN!TyYOqU+?U#lw-^|5s zU6E%8;;L?Cf zWl%|V#Pg3}&`wJ0l{zs)6=m|KCEv0V$tsfz=5bhz0aM3GQYCym?bK4GdGqG=n~QrB zn``oN7vHGmiW6e>$J%}~+>R^H2&!3IbcNGozW)q?k}73{Atr~|$wlFr4#B+SQgV6@ zk^XSWZu0cU7Q&_wZ8CE3i)@PD*C-s+m++GA7PevjLAt;O$@vgzHRWdbIQBy1O_t}% zFUoJ>p}0pr#x}~j5~UPW$}1^i6Ld8Ct8CMK91e{Gbfd1^hCGk3k@ZqM8@I8w@~@#>s=QhGus&OVQ{Suqrgqid<6KujW=`qtjEz9X zjB^}z)O0@W{K;7lkd_|+W|`_f;1}` z&)3nnz<0oxUlOa}^J8IT?u*z|jsbdb&8&oJ)%q%8#WNez5t zTfsR!@riu|-kHT#+$-hI_$)pSh{r3`vx7W8u|d0s9EE`vs12vJlkb-YvVHpFc*wqh z3Vnx-yLZdquxy<7Lbr*wVci9M+zaC(F+Xs8#a>j(sBP6p*fRZq8qLkIXd^dIyP z+fUzR3^8UKZyI}zvqp@gqNAmwkE1bae-9gW*JC^EXO+#A8?9DV+p$UaT=h-$3-wnu zz~Cf+rnsI=*pu;FY${(avQ~yL2uH&`BMD>F&nb><+NRV7x!a zLg^=gqnIl_i$P-fKd;5>c_U+QGiK2asJK`93d$cr@7)HdL@$gWvAw&X^J}F1K-vz# z%|S-F#TiaH$Y{?e7h%L#g5tNb(Rd5CRPQJ^!kcsw;3R9H*B;XUE@^O45_GGC!F8MI zJ>3HXY8c+pkF$;Xe7vAnLP_BRy$#>zR5`%g9mby)2z1YFVu}oN!2s z)f>ZKD}bxCwI+tSQw;@0u9WRZ_ zX?UnF#<%@V=15zi=mC>jf6)IvIaW@F0_ElEay`b{-Et?nHa^4MfmE4*SMef7u>qi@qeu&noCvtl zEpk)&9(>}5;qg8j4X{RjPyP%a_MhaxWRDWB6jmxKb)8K)R z&0QP-UvJ6uR!ldtFuI)iQXgw^jS9;~8(O)c4it%3elbV|BRtBA({S zT35#M39W?QQ(vkd0Vu3J()2UK>!|M-_PpWH?3>p+}0_C2BzMrz)yk9Q`{qEPt>d&$j{2n0Yd`3~j51+-bG5tQZ zoR+F>(L%_O89>wdjRx@5>&6MTq`%#f>R9DC;P3&b)y+8#P_bjq5Kvq9x+b~o(zz%w zN0oVccq`JoIW)TmIeb6ka{#m(X^!kE=_7kFa7wR8Z!lUnG4?)zE_=X$t;=|Bg_GHR z_;U|nRF47h>M1zo1w6smK=sQ_D>m!#H__9ZFvcDS!El70$f|0Oi{ z$H>*A&_Y)HN`g{UsRV~KQ`#x_Lz`43f)PE8G5#@p;8AZ;A5foGH>xMppjKIHtBueW zXldF(?V^?!S=t8RxM})J$nnGaUwW)j)@WoDf_rDlAEG7Vm0Offl(+yCg1yRVC7>2n zYpZSGsYlg$>TBvpAQk+q>ROyuQmd)8(C*U)X^(2><)+Hh%9lzU7R5w$JrW?F)>Ip+ zErvJFYX#tpe#n%!^+UP=C|y&)>82U0ja@*`#R7}g+F_T@2_P0!gwFK<6m7{wvI7+B z4h&E~eDp2w9}7O|NfTaZE|U2<#_bZM`Aa}+y+-a^$k_&$mp*9PM*s?%3dNoUHDD#) z|AHqrBg1!rvU3R9os@n-Xa9xPb|M`jpkY-kgZ=<9%|wQ*hGL( z0_#yxeCX?fN@=AklDsKaTW93~MML7IDl3uV7nEf5@$7(_YbbY3H;A z{T980K2o1Ye}Ac;(W9Vn6QjE^8nC}O+A|OQ3|T3q+zH3bSJKe_7nLNm^qtUn5*FGz z^)vN*Re{2#wOh5;S}!!i3?%g1+IG!Qx+-g#Ce~BOs_&@3sl~K*+9Yi)dczOgWhZ?+ z@_PrMlW|5h;~rxKHLf@I8-Ez_fCsj6^tDarB<3`gn7Y;n6XGs3Z5PI6f5!4C778X~ zkIkkZUjXevjO6v8kYrHpm`ODu_ZzYB(20D5$Tg8XVl=-@`ZQASWUL(~_NCf9QCAl@g(*DPcF4xN4I^ny^i3f6d2Cmfzk%bj!>pxF}r}YF*GWw_zXts8m!3qDj6}^D@>)!(j(Bw_XYU8jl3|Oh2n98Y#wo#yDfK@gX*X z!%@Uh&(Xy;o$~`2Tbu=oir|0TBGrc8jd6f%#mE*CyenF}H}ZI}2`4z#1V)?2*qaOW z7cpjEfeyY(duVlfHq9zaW!^43Cg2 zk@s%u=|>IY(bRKr#aw|TSdYZt1{%m$*m^&}C4Wk)nLZv1A;X$$B=@DBxp376oHT{C zenIk~7m6{m>&h*$^B#oeRB@cQ&4a+@RsmxgHt4xCWdz8PF zd}<0PGoz5UZ>qbHwH~bylJ;(`k2YSLhmH0zlKgkgqvz8r>c2}RnMpo^z40O1K~?f0 zEm|r)mC;yyFT+b;DBmL~Lh4OwWwilPyr(*pF+K-Gnzz8A*`ua0hrEsX;5zh10x9}| zW3xd$tUA!{jp2w%*b5)vq9kFV->kO)Y;>GHUw;Dt(PR2WJ;tyrw5#hU>1-s8YDmW4kWkf#lN(H*WBNGbs_ z`507t3VAS}8QNkbfnAB=7X z<2#ZOo)_(247gj`q!)i{3M@cEzYSt3w81^D|$eATv>r7Qzkb>jZ3VXS zxAb-%Xxj{HDpjAQuhKu%k4mLLQ+k?`zn6oI=vGR92N#wDNMf zJps8rmmI$n9px?YqtK+!e?M0SP%6N~B_a zPhbQKfXz9Kp@sDC3R7<1itKFyz3w*kdrxGr;FIyBoq^U}#8`d}xxIK&}T z1K4kWv1XD-E{ZjOD_qn8jXs2#+*EAutg41QwL*zKMls%8W6-jS2xH`EWt6@ zVkfY<>oW3ZV7DD)`M!|W0FD^1Ez&ljtN&nDU7m3*B*|?3RsCcA8~r@1H}>UrK2vU2 z$|ARge(uN`nFZ6@8`=rE{V;NSBywB8uTEfnWAY`r-5j~yi5Xdj+@1u=oRHh|u+SGH z5ng6>Z4GjJy}91<5psJwbT0>AiFKBt=-KeheJv?ABh~jnxueMKU(x0g;J04%c^qpf z1)*apX7N>+Yguyp4R}JxZ57F0fVH<4y$?3hI94*|K!=yn&l{O#eFmkEpp}2e zK65AwpiUh2cMsN3mNUO`LXUPx*(K^0RxSca(A%+(A45yNhgSYWi(!m4!W(^u_ zNk4*q?#lYjCiy!ga5-$czG#4D%6nkWoq@hZ)S8Uyo@o20u*cp;8+?P6=g{J{64+!- zwO3^?*4sQ*YopXg=yPR$=0PxbL@-qvz=B3Ron)kfn?D z>a4ootjwTgmCd!8fvJ!3P4PMW!~8$6 zS;0qv3co4&JiS-;VnQ!Lvz>LoP2jBjGFYn5yjCHw7!JRC$hI=4|o*-gy zWO{9Z-)e-=|$W_9IHr@OOvEeiFffrN^aUA+AxN9uk4l~(%0m@ z$nu7jZvfmRV);1xWn}J*g8cAtKjCuhw&S%JN&0{nkIUc?aVFV{g$h}pxhW%DmfbS4 z-izoTaWA5r^hdopLKA0lITNgqle^q$>j;;gQ}Pnl5l)`dW9sx9`kTpl`_CK-4hOt( z#mfO158S1SBWEAY{$I;WMZsd(6?NOl*;_A4HvaccFHz2+aUNci34#Ud1TpfTe+&0q zPIO7NjvL8SAW!Yg@-n?=DyNezC*++LEQjuq$0{z&o4dS!vp?-tvP!L~mp8^Z2e5@x z`8d0|UW@r4zD&}YHM)+sBV$3dQvLYkK7<)DU}7uEW1Cz{Bz&4OlH{-s=1`w2MZ>p0l$hs)m(yZ(OJ?FU{9yRL)Xez^WP;PN}V z(GOOC98Z^%>7Mk+NTKb-eCcwuKxCwJBmVdH!3{e9_tNg~jJq3jzCq`7fKlW)Ht!9& z{a>xOZj9#}|!&6|sF>e;WlyONscFW>R znf08=nD5n08Lv38hzC#kUZr5Ig;jK>CCpUmM!3-f|9%f-$D=UqjpIfS{OdhXfEEZz zi>oQ$%vV8zQZjEur(C@KV#kYpE{@7Mg%Hl)8MslWOLaxOZ@~%iaNH{N(wWQmOKOEr zdN@r%(_LJg2^V9YxUX4;7BIc%GoLWw1jUJPA*q+ngez((IcdXv%_ua7{XCMn?dv(% z?FWEQuIpg8AK={U`Vfzqt#Oe)NHbYbnIGw2{>aa6t`Jx)b#bcsgz&XFk~b{QG?Lr$ zuE~bQVo-LZ8L27hqK8lOeS$jS2E>E98cB%$4~H1a4Try1c9hwkYqd$7k3t9qDLsYv zi)$fCOB2L?^QGC5xa6h#5Gk$HV#~pd5I!GsDP_2QqPUmFHX)@>Sz)`|9cCSSc%#wmhlJ z!K+q|5+*+srWeI-+XXL$n>bU1Yl6Eh4lBym8@lwMka1eD48%jPr*E& z#;=NhCw_mto+mC(Fwf!mN%5(PZIUJ>E{Qkd$HtY6Gh)Aq*%q@tW?jryx~OT~y13f$ z@5T>FES2Jl+?(I{LSW-$F$~)k8`|$B1%~Q=_BE)g|t`xO(xa z@z0U#zQl8hQ<8p8?3U+Zp1}z_6JitFBtDyXF8Y?3;W5i&(qdM`^p0`GJQLk8x^ncr z(d(j*7&_?dW4wW<|7d*x*d0UkiFh4-tbeZ;_QrXg-d{bX z{TFCH+SUvbs+}OAQaed>y3w#~e5?CF0 zA+RX$MqqEi9lRyjGx%h1Meyz5JHgk2vw{xGXviQ z3I{s|r;zeH`mJSXQs`aiQa|Fch^-Mu2x_ib&PftbsPpu^$Qv@2cnO;(FNiC^!_OT%BEI*m)$)`H}NeXRNCb9v!n? zU%O)6o!ztDo7|J#FS%cJZ+AcBxjFI^Tc>lysvmQUzG2tw}h_;m`h!tPcL5| zDAwE8)ps}FZ}G+WI{SwB=0f8=zMB4-{@wobem!u}f7TxvSRdFGoE}p++8tNWeaN-M zHN@4zRoB&&9_Y%ipIpV^8$*)8FizbWtiwnkx7R7a>&R`#Jp4KEiKtiZmMkwY?f_g+0??; z78X)CSQbHH&K5CkZt@yG=_e_0N`#N(SYj&vtAp^A?E{8M4?LGe=nZDYgXHUDrtU|+fq2Fa zpskDAXHv@3_}$K=#5shygxUO>VTPIJ^{JFR0FT=Tc@Mg))CshO zb_9XBFo3#+hwoJQeyZ6sV`+zIvG4~?6-_^T&aoGI2N1$f%bAg^^4e-di&Eyea)Wh&u1Tc?Ljaj zx^uM)-l+mXq6hsuh|+qRh!XdjWpv^Hz4))*LuyfqC`SZA1##v++L;l=_Q)Nv^;;2I znk{dDzjIw;eeR;U>GgasbqcEWqy>G`OS9S|yr4JJqpv`r@yG^?M#D{Nj^dssLcJ%D z8c*^$1*swW{3-fy2HyqNg`mJpvuDTAGvZ!*ns?WU{u0;;4^aLvN`1tXJHqdFG<`nA zyeq+jeMsMfeh~NEiMtlPB4TGea_``N?xc6ybGP@BM)aOQ(ivp(>qFd=px3QX`3*k9 zs{!V_>nYb-4Je~L0V38Ss6G&X+i&pSegrA`qcjM~cUrm|Ki$33aJ)>X-( zIEX459}^1>W)-}`iENNkiROYs?ey0O>O{-G!^n32im4tOP=CTHWc$ zfk3Hg`>*_~dx;iGwzQCxY1*}7a(Wqxe2Frg$vDKKwn;fTOmA@yrGZF=tN4~$OBO6q zx|(3JaFVMtSy#NEGlFn?5xH`5@A5_FNlq?Y{BI`D+DLO~WNx*2VgYLC(rt(=nNPqd z;zZ8wZRuMehLh)XLp(7MsKB$*OILDOpf{8M2mht-U3blo@NMMe4My|DaU7b9PLdtT z{JOS0kPwc;5XTEqkOEL?!8?FHet`@A zHsyKT@gD=Mer+K%XROi@XR}u=2R<_X3>Y zah&i+tG59&QyS>6hH5JSin^O%Lc;;Ed5r7R2s411orQbOY2^CQp0J?(zFuz?oe}a-~iE&X3 z_;ukJAB*`b7MZL?)u7}DfE^TD92ULip0X~S7hNENTfva#V92jU0aqY}KnhR9kgbZb zS;|~85({%;;U~#lz|6zKkF|s)77(LYeny5V?c`nLFGcARAn@^+z-<6hX^3%A+gt#= z8MCdlxsWB6whE;$JLN@7iDkDRly`wH8$%jVzrneBDEg_Gs7o;#rUSu|iqS9xBcUe> zz5@nBYrO#oLwj(p^ud}r|m2$axHKdNF0miFpS@Xk!W_~1RfN!a_ zx=X)Zbi*_*W|lnKC5r#nr{$R~YRizySFcU2phrdJi4|0|l81Zi8p*S$feKj;JfUQx;iz=B$p~#GOz91$kNI(S?(gaRF)%$yC|7A%aP?S;_cpsY#nx~k)Hg2?ZftM zSc2i7-bNO&@*n@1Rhr7;^#)6@WH0cdq-5sqkFer1Fnt!^4y9d-Rji5_0K$m)@4g=H z7>6u0M{2EZSxg3~h<|FT; zE5@nU>866a>F>M!?5f;z<7ADRtw_da0McAjojtY?ZS|dRE=z?4u0U7rN@oMKzCe zusldD>pCGnp-u4It1QqOy6v<_k}7}{C`t3=PcepSgXSzc`(1dtFX(At2!SJKubc(i zZr2f7^|?DqdP*JY?k`2Do!zQ5OCREzEVb8Hx$Km)S*on;4}dwXUJNXeN~_-mK9^$E z{efa~D(5T69=_Wtr>0y|+v1$4?9^gi^XMP9Ypm?oI(t5q=ja7If5|UuF*f_>F0ifH z(@buw$Wl}AQei=GkR|CUuoXqWm4}BcdHS z-E2%WGl1wA(KmMX%OaULMBj+y8PkN!oj(MESa%L?r}DY>5l;mN%OBa!6-Mi`KErk8 z1lp6pz7QorkDkgdD^m?&Z-^EeIZTri*jXUEFqKlX3nf8p%r5MrMcDdiXBx6m1 zeCc1f_i}P8xRl{K{bINGG%0hi+k2VwT#w)F_MVdkbP?PHzxfc^vI@d;{Ht39;avaL zr)X_%f}eZMF4*n8%ZHv_-n%^4_4muJDVirHIyxd46f0ns<(fUyWm)*n6O-jge@J}I zkBBTsFo)y+*lh&;KA*?!wo8qyo#)STWL@gd`rDJ`aOZGbXVl18w!6B7O9n((JbkI%Zu010Vle3Q*-ajBN4ed8zun{sWy_W=RJMrS z*z;6yL@8NFX*N+T|6IFE>%tpPQJQF%`b= z+_XP8G9}#KqR;>OT+~{9T#zmB1zk2>zrL)377G2eTLiqZ+(hB%S{yhotv23ez(gj zrFjm0l2x-R`6OvP4=GiK6YfiQ>L<6GflpCW`*fO%$}s zO|;7^!_ak)6PpvK5{3SbCT@n;?aCEVMsA|0KQ~ddJvUL@cW$ESv)n|{-?@o`R=J6t zsNZ_fpz-b6J}nm=U`EAW%=dRc#T?UGQx3n{C8bagQB3tSUT@&{mB(sMiOhz>&9`ee zE=^8T(o|jmailp@ys5D%x2Lt`)pAwRQuH)OnoIJhCZydVwN6n|)D$h%JV&}vO1`u^ zQWZ0mk>*bGrUX-Cq#|j}BsEn_(^DLhE6pnfQXc$O&Y5{F2GW-`kW=MNG05|0yqBZ_v4BR^>ZA~DC${1)~6LOf3l*Hx5j z;?+h@UHp+K+9mEQb9>NY=|e-@<+Zs_c*twCJOCAIniF-4;d96(9OE?2ZY9Z5GX6D% zP1p5mwqO6beA5@ZbzPn-#LX|hkm;2%0r9%{f^r4KtDSSAu(P`}3X^j_A!c=F1!$mg zwGK_K&E+~Fj$qJEO6!$6F+&w)@}?!p9D$ScWuisqU zo7jYtm%I2zEmxcnENE@h8E(gwX9U%(t-Qi%t}a1SrOd%@E(*_dh*c))QgV6@0iugI z>?TitY$0q4aVJI&{*z5`&>xBa*dhv(x#`4?GJ zVw9pvHRU!o4DQXw*;Dave2vY9cPU4dad=~%W<%oI^1bAmFTaJKiJMtUahbuB~KWyi;08FUMxY{q(8&Dt)`&OWrG&C*NkuzD*sE$Kx5b zB%2pcW1HyH+D&>(w&Q+T|5A4VQ`EtjV7z90Wf;KLv;nGSx#Kg3u8dZ`R~o2u)#GY8 zZIHHxTxHng`B{Cp?grSXH*iJU0J16WxZ5$t@v>u&LvfaL-sv3Sd;tKPU!8Gmp?p%g zRh^DMWdZFz?Ro7hHUe*^kI~=IPv{9o6JwaMj7{eiM``LD<9La!kS{ul0M0VV`HXXu z(=MH>V>vZuwW*!sFES z3Vygdq=V8=@RzdV4=tS8H}+zf2g_rCP@>%#Ns5}LqoFGRr zIIIJHxs&DR@wfe0{tC(~N|aJasSG#Xg(vMGWvntC4tqt}pnQU_?00P6t*IBJ>hR?p zw!A(jyWrghN*6eB4t%&3U)u9ZNG+^ZSDUL{)FF7u&d2|C6W*>z)Zf|SJ5DRA-G=$F zTMj67lzwdT{ekj>5~)^(4~MFA)Hm7c`?MOmv`O|%IPD`g89%E9^&teW1LG z&9q$4A{51ydIfti>9aK&_BLgw>A{t{^gRCt~7{tjNzA3(!xP-GX-Is2hY zMe=s!Y0GfnE}jCIWEq>iucPljA;nkHx6oQ_;x6MD6To~*lnX$SGIAxkIwQCNbZki8 zNo*AVy7VFL1IK~r(J-NsNL2|sH#WVjd&vFeVe(k{ar$&V-qI_1xm@^4Z-e3^@!&or z>2e{;yGI@X_w)(+JdavVZJ@SiGxSFpvn!$UE=KNo)vG13MSO}@91ri! zvZ36f^uhmnv+|1)&&Kba)iKDL_t^4XB3)JO4y}(i5h}f{eXgCv5i>zA&pX>4^nrSJ zc?BGnfUFyg_x1Tcv52=5uG1Sx$88bwiqAjM3o!W8jFD*hZtXH#5 z=Td;k-QnN;C<2&%+oWdQx~Ra0?;0%FjQ;F4dv#@ z=-O~d560vKz+@IdV*x+22l}1@SjmYwn-9~sGBju^x0df?EI&-2PGS7K03WY|R<~2@ z6r{jWY`MCVMtSTWTuToN}$~bMM45yt( z&@|8Y~6OB_+y$g->g8H%gBa)y395PUwuDy!J`GGnM>$Tb3elTzKuh8Guzt+## zrgIUD+{!$qxE1`8+nKDiLk`~$_)C8z_y}N$CNi?0Vq`CXiUI-Qb&wCzKsVTeEZ+qW z)R&sTC2jF3?@6AalQKJjtuTtw{|uN3Z^-XsReTLC&cGo7?1~~vc}8C&!rDmC%4+qrHt^hNZKh^dZYO|j zP?4v^b%8Bv!PsmM#qP&fzb`s>2+}x}iR1)mH^qb+nr(tc3COXfAPBsSJTK04s3~;r zip(E^BjQBl!7R99F%sc5Wc`M8p4biT4l?pipn*?I=b$;x7P40sXa@a&jhacBufai| zAPo)!p>_sY?*{rT(Uc#RunOy97q&!ScSd95x`ZTu1PiejFjViLL4IdU7i3D@80p;$ z+>FWcT&TPjDu2eL_++{^Pf!Xg<&+vog62v)ti0aJYFbm6a)%&e-U27%G`hB^lA_$r zwK2*pWrdQae1^SvR&l8bjJ6tTQ>6HV>TpK-9CfMcl<$Dfo58XugmxIHJPlWTshm?{ z8QIOjzZeIN-%z)!N7cX7|JUA`07gx%dpwiOBr}<&%#?OI(-tToAZ0H_mMgTZ0+;22 zC_Y3{HrJxE$R_p0!ICz*8G0osB0 zybHJaW-^(Rb54@;oo_iO`Tj|CW;nBv&|93N2wzz2eA&6hc?EiZ4R{=eoF!i)kH9l{ z1yAy4xr|a>X^G|;tURPF#L|DDe6IW*ty0O^z}e2(6FV>#IbR$zpDTb6(Ewhx;m+4p zpgi&gi-MK0sOHUaP}#z?sL*=Q<66UOt&3g?1dXg;8_NGza1rSL2Nb>L4 z>B>mU70BrA@@O>qLV30PHtl&teumyxhEmtz>n(6>K=OZc1Znfm$ohCZtC!?_WXplZ zucx%b?haF?fm5;$EB&n^J44Q|rA8d>S!{}i7PuNtJr4TFXY#Mu=>|#{dc=Lo0_9cZ zBjp>0{He}NxO9W_Zs$YJ1Ra09)7_Z z`23aPKo`_^{u!@)B;$dl&JFlvvC4Br<_|K^-SxoPk2i*yPyA$0pk$yEBfWl|VzZQhJCM4W~niF7y0vJ$0z>TAQ??>Vy)iCVsIQ9ylzDSP{dj17$_AB^Y8{pz*({r!KsO~ySjig_QahcEruQ0}X z7rEXI=e|UTA2U664f!sMgqMfU)sgc0@TQsLIz|Wc(F0q_`;(;LDOSXvZ(1;h6Mo+m z(2bsQ{FU+61~lw;WbY7~{1|fXlEoY+y68`!` z^!y6t4Mt^$m6M8&Y}a%)b(X~%jbwJ>eYosLBXpuaO`!bCrXD#3u2FUT_bai|Bk;iI zD=%QDcT&SIirXC5#meW1-tHLI+hP#M}Fh*!7Ab1H$pZ$I=W+- zZ%0Swp_3m)D?bAo)obv10vbc;?PH9hDB(8Td_MY%p)>uz#w zGVS<0va(Y?EI&>Eh^JIfJh%CH^`ANZfk%}ocZ6SK<+;e@R&t$^1K>`zQLaat9zvF0 z6OyEyR+7-$4bd3Om~C;%wejtSVqt}aK1qp8yr^67)r5u4C%@!O#%phlbsfl9c%E|= zqv>N(6THeLNb@Nye0wy(H2ko9`FrMVs&mBN$|z+f+}*;M{gjf-2CzMH} zFLiO;02uaW%hU1smf-P4=HT|B3%)aFS|ngN`uGlawMX0Qz$V zePJ{9`{^x(rYFT}DiY<>QRR{mj7DRGKIUrD|yWsq~-&NOU!P zy?*d$9(q^IvpAF>{AsQ9VBTXKa=8q^QD~lP+y7FXD0c#^GuP{^9h?#{I z&M%$inOB^|jKmMFN@_RY@z&`@b_oU^TIOjS~I6JuJ zF{|7_9i_g>EOuM%er=PcxU=0O+^gN+xvO}3dLHq--d&%ef28{WKA!*>_%Gf%asA^SkJ}zs zo^kcH&OOd6T^n50)JdFUGwl)W3oVOtd*7Ypxz4i?`0)(=Hhnoz;ThhWyo?>U|8PWbs8D{>>}Vl8#X4YV^7F6_$16C_o* zQ|EA`vt{yz-wR*<-RnE^E@LY$R`gB`K3lQ&P6;q6o;Rk5_{Lg?oqsoF#>?ES=h2XS zrzGvyVy`2bH{v{2QqTFEhsfWI=PEN*NgBtK2P1&N97K=0f(LS9y_Uk~QJFsm*CXl> z-&pHd6_BJ&JablufQVnxBVY0VpIJxrwRqr(eJ$Zzy(K~z7YaEO-AOB4NH%`@fYc$p`AsO9~=nAM5-|1x!g1HXSvO z>~&I4D;dt{)c4{~D{XW)mdNtWe8tPDfL*?bDb{u<`h?iU_b=9V;IXianqqB-i?0V1 zy`s`~u-fCRu$~M@(&wNon_GU3Kn*m3>iEx12cbqwzyGmqP|D~3j{aN9=TbhG>g|iC z50uLD#ly?u{HIbrm-4w(Z(lrppj4hO9$prwx5e$sAa`}R3(OXG*+eX5upGDD!U_8y zah^3z6s+(OzEb~R=~AJEC{1T%WRaDs_xAQJ3K@(NPy19dgA#rt%k4z2i`T>^68 zVkS4dh@~9>KDnqV)^?!hUet@Y&206Du#gt=po&1%6uIRWYbig_z^!;Rdn>fpl;rhG z3Q2Mgo;6v&LM$Tu&$I?)+vCY1v}wS1Vwc1dKF66;hbrGUi0 z$Ub{Zq}n9%hD@^FL7dDJB>^a@fW*H5snHb46`+n(-uv5~%gKgv_!X4Hb~9oOoAQ*p zAhBhWl_J)EGT&z0n7F0Oh)B%jN#(jG)nhx0=cO+zL=8yEB7#Navhvj-=BYLatToLy zA!iU9QynOsOM%>p(4}T-(LGgpWAY`it%BJ;A<%G6lVq)KKftAxm9l@xVYwMOc$WR^+iOv;;lj^?7p!=gPv@LBLp@Jeth zwO}j4w}0=gvOxVLa1E`Xa$HFgVv_(_Yq3}C7i4WGhW}Y<;suvBS^MqWMN8QG>|d*N zWG(6t`$USr5Jhqn-LmQtdCPLf0<))uDIHe2eMVNDR;~7t3;#y)S;vn^lHl2y@@D6^ z_MDrqR?jco_pM%M_iMZNiC&scZ>xjUw58{ZcamqA@>7FfQA?!9+BJw2OO8a|h@1&o zi=@{G*An@yN$rAan`CXI%A|U z)p*|c&e&%d@s;Dt#UC?H7?X`Bj67qYF~*o{ykgvEJZrpXtT#3r?;80=di>W$D1KD@ zw)jiSj4$(9nR&h=zAS&9|LTO9373|wlvqD8BT=TC^h%iNzsrBOf3g32f2)M7vir)0 z5`#(WlEx-)7{J6Tijo{eV!(sn>`~u&w3_%=6de+%=WDGtn)n1 z6ZA_xPm?mi^Mq##DPMYO>(}T5^_TQt^f&ce^#}D=^*wqu?={}O#{AT3-frG3Z=ClV z{ZoCFp0CSZ#oN)_%X^=9x_6Yfy|=D+pMFw*ou~hw)F^-*6-rDqx3siFVfeN|D>*Xvw6OM zs&|8TjkkQM&%bLNtF&)oLlkoiqq3>te~XMPU({}CuLUXF3f6|v~Fo%r#>F?r?^A^2uuq6 zInX4~F>rTaLEx>x$AN=^uLE+jFS%Rt^TDLhu+ZC~`e}{R@yWD?_b7AHT#H z>Tm4-+!t4NRzj16@BQoj3;oml!~C87N&cshzU97mec$?${muMW`MXeW z!2hFfx9@wps#J7m=8h>Sc+xRB&wUEWs z_=I>Z{-kll*iD|5#w_Dr<8EUJ+?{GXY2?z&=6RQUpYuNLo#xH;w(urhu(wU&%Ha?TIikaUEYwU*ji z?W^XgGu363d|h1!tyN!9S5nvg>aA*fwYHk7CadMux@s%+8nwTAv)V_!T5Y3dsg>0P z)uI0E`pWf%>#*yn>qpo3Y;AX~1Knf3YZf%mwZyfGh?i{~^Cz&QDyWyK9o2rs-8`&5 zsXhZOP-k$Qk?IhxVVe4)dPp_U7410RK3Y$7MGZ~T_HstM)O__F(1C2ts+Qoh-b4)X zU}zu_!NWiZ5ZiDq&@i@!nEUSpDPn+0cM!=s5E=xD-#ek(z!%6h_YO8ughUNP zDL*1y+h8;AozyH!iz5s-Bbz6IEbtI9k+V$niRXxFTR}A96T~r#)Ty8l%_Q1wIgx7u zZ|oz!TZmv=5%y@mBewBNA|gL!&o&~QHxTQ*hC2RAiDksS+Vl)@&P#}AUBq_@+l$TZ zxy0N(KM!^v|UUUOZd-Nlv7V$U>c83#>}1oG1T=9NFh znLS`)JP0hNhoA@fKZ(5)$v2+dBdJZas%ZUO+W%HKDUe=rY2mv_9}?!G;N(yWpAb#_83U}ntoN|~i73`ziA$|Q z8OiZ0vB}>PgT4#e4M+FF*S$o#{z$%K>^n|;;}1kRehqy?&NNEZcKn^_Q;FlacmUbW z*GWzPpx)zV-F7r&h%>C_ScTtXFJ6gYF}P3%-=;aEoXZ)-h%rn(`ywRspP*d-{;rm5}XFHM{ClHia)?y~asUSrXVZk6}-0o1LsS5UKPk_T^%<&R)_5amN4%FGalhPt-1#FhOr-|9@PC-(7dkANw*&iU#BK#UdVR5SQW5()m|R z9|UG*ByQMKCRp4m%$fKKllB_s>~&xx)}zce01og5Pz8eCg5HKUnIz%j9FQsj^>`KG z|NQ|PxZZIi4#Vw0y4?ln$Pj=6hXdO)8X5xxfuQk#0ZzoRn1p*F;i%PM&upMTUL-7j zGxRh8`7Z-eA|N0)0Uxssh?yM#H0_2y1(aYPbb#+6NRsYwlmp~*3a|w0fMNTX!1!&z zOWhB|%o9NIEd`3=RTB>KJ%9*yvHw$OFA$&mfs;9kfNpUtl26N-K>p+c*f$xF*n5GC z%K)~dH9#|0DmMTecPn5q_W%dt0Bb?r~fOU{&P{EFUYMx8l}y#SN-1i92g9 zrXy4MCNWJWrqz6as2irkB-|$PPFWAZiynzFhe@h5$8m~YF%*Y}I9<}xaHtyN;E1Uy zF)e8;kdXTmZx#Br)^ zPEUymt1971*Ya4YH0u3M-Uz(tIP!?&tE9EYp?w(WlxJ{PAHj9b!+{-Uy2-tP$La~- z(lvl<{RObYD*#t}MyW6NbS$C;;wkUOT6D)Uou2+O1Bxec)o0**k4GMcV7kRn z=r)dVGw0bIko6O?D))ALOWK7jgOzdeyTGyR;jAuXvDK1Rf?CS^Cokz-jHR8=Zl~&o z_dCvE$D-TfeDe$I&|`EVb0PF(kI{wgmxzpscCUuD07O_oz(<#-3!3H8oMqU`%f4AU zepXCKS zJAD%(d#tUZwIwG z#TB&_-gma`XrqivUSx@?&Sm$Ql6ZKjwb0fYqpFb}3Y7K4dev2tz(_ zFn_?G=sp_jWrW?sSTEz8-sB&&BU+m>V`D3p;uT(^ln(mzSdg>^GbeQmGga4Ow6k#v zvTy)|6Y-zD-)wn{r+Xtujxg$5X-+;mRy&~URvO~(w9y4Z4_WEp5gM^ lE9D4&lAZ$!j#!!t4_V9tS-&UEU*UX+MTk*<=_C8E^uJax{cZpN literal 0 HcmV?d00001 diff --git a/config/linux/ipu8/pipe_scheduler_profiles.json b/config/linux/ipu8/pipe_scheduler_profiles.json new file mode 100644 index 0000000..5ee2676 --- /dev/null +++ b/config/linux/ipu8/pipe_scheduler_profiles.json @@ -0,0 +1,48 @@ +// +// Copyright (C) 2025 Intel Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "PipeSchedulerPolicy": { + // Configuration is chosen according to: graphId, usecase, cameraId + "schedulers": [ + { + "id": 1, "graphId": 100002, + "pipe_executors": [ + { + "name": "video_lb", + "nodes": [ + "lbff", + ], + }, + { + "name": "video_po", + "nodes": [ + "post_1", + "post_2", + ], + }, + { + "name": "still_full", + "nodes": [ + "lbff1", + "post_0", + ], + }, + ], + }, + ], + } +} diff --git a/config/linux/ipu8/pnp_profiles.json b/config/linux/ipu8/pnp_profiles.json new file mode 100644 index 0000000..223d952 --- /dev/null +++ b/config/linux/ipu8/pnp_profiles.json @@ -0,0 +1,37 @@ +// +// Copyright (C) 2025 Intel Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "PnpDebugConfig": { + "Power": { + "useMockAAL": false, + "useMockHal": false, + "pnpMockFps": 30, + // algos + "bypass3A": false, + "bypassPAL": false, + // disable all face features + "disableFace": false, + "disableFaceAe": false, + "bypassFDAlgo": false, + // IPU PSYS + "bypassCB": false, + "useMockPipes": false, + // IPU ISYS + "bypassISys": false, + } + } +} diff --git a/config/linux/ipu8/sensors/ov13b10-uf.json b/config/linux/ipu8/sensors/ov13b10-uf.json new file mode 100644 index 0000000..9c8ce68 --- /dev/null +++ b/config/linux/ipu8/sensors/ov13b10-uf.json @@ -0,0 +1,288 @@ +// +// Copyright (C) 2025 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "CameraSettings": { + "Sensor": [ + { + "name": "ov13b10-uf", + "description": "ov13b10 as sensor.", + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [2104, 1560], + "format": "V4L2_PIX_FMT_SGRBG10", + "formats": [ + { + "name": "ov13b10 $I2CBUS", "pad": 0, "width": 2104, "height": 1560, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "pad": 0, "width": 2104, "height": 1560, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + } + ], + "link": [ + { + "srcName": "ov13b10 $I2CBUS", "srcPad": 0, "sinkName": "Intel IPU7 CSI2 $CSI_PORT", + "sinkPad": 0, "enable": true + }, + { + "srcName": "Intel IPU7 CSI2 $CSI_PORT", "srcPad": 1, + "sinkName": "Intel IPU7 ISYS Capture $CAP_N", "sinkPad": 0, "enable": true + } + ], + "videonode": [ + { + "name": "Intel IPU7 ISYS Capture $CAP_N", "videoNodeType": "VIDEO_GENERIC" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "videoNodeType": "VIDEO_ISYS_RECEIVER" + }, + { + "name": "ov13b10 $I2CBUS", "videoNodeType": "VIDEO_PIXEL_ARRAY" + } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { + "format": "V4L2_PIX_FMT_NV12", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [320, 240], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [320, 240], "field": 0, "mcId": 0 + }, + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", "MANUAL_WHITE_BALANCE", "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", "PER_FRAME_CONTROL", "SCENE_MODE" ], + "fpsRange": [ 15, 15, 24, 24, 15, 30, 30, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ "AUTO", "MANUAL" ], + "supportedVideoStabilizationModes": ["OFF"], + "supportedSceneMode": ["NORMAL"], + "supportedAntibandingMode": [ "AUTO", "50Hz", "60Hz", "OFF" ], + "supportedAwbMode": [ "AUTO", "INCANDESCENT", "FLUORESCENT", "DAYLIGHT", "FULL_OVERCAST", + "PARTLY_OVERCAST", "SUNSET", "VIDEO_CONFERENCE", "MANUAL_CCT_RANGE", "MANUAL_WHITE_POINT", + "MANUAL_GAIN", "MANUAL_COLOR_TRANSFORM" ], + "supportedAfMode": [ "AUTO", "MACRO", "CONTINUOUS_VIDEO", "CONTINUOUS_PICTURE", "OFF" ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + "control.enableZsl": [1], + // 0: OFF, 1: SMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [ 0 ], + "statistics.info.maxFaceCount" : [10], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [46, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1920, 1080 ], + // align with ISYS output (2-lane) + "sensor.info.pixelArraySize": [2104, 1560], + // 4208x1.12um 3120x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [2], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [0], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "scaler.availableMaxDigitalZoom": [ 16.0 ], + "sensor.opaqueRawSize": [2104, 1560, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1920, 1080, 0, + 33, 1280, 960, 0, + 33, 1280, 720, 0, + 33, 640, 480, 0, + 33, 640, 360, 0, + 33, 320, 240, 0, + 35, 1920, 1080, 0, + 35, 1280, 960, 0, + 35, 1280, 720, 0, + 35, 640, 480, 0, + 35, 640, 360, 0, + 35, 320, 240, 0, + 34, 1920, 1080, 0, + 34, 1280, 960, 0, + 34, 1280, 720, 0, + 34, 640, 480, 0, + 34, 640, 360, 0, + 34, 320, 240, 0, + 34, 2104, 1560, 1, + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + 35, 1920, 1080, 33333333, + 35, 1280, 960, 33333333, + 35, 1280, 720, 33333333, + 35, 640, 480, 33333333, + 35, 640, 360, 33333333, + 35, 320, 240, 33333333, + 34, 1920, 1080, 33333333, + 34, 1280, 960, 33333333, + 34, 1280, 720, 33333333, + 34, 640, 480, 33333333, + 34, 640, 360, 33333333, + 34, 320, 240, 33333333, + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + ], + // 1920*1080*1.5 + "jpeg.maxSize": [3110400], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ ["NORMAL", "VIDEO", "ov13b10"], ["STILL_CAPTURE", "VIDEO", "ov13b10"]], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [[ "VIDEO", "DFLT", "DFLT", "DFLT", "DFLT" ]], + // ascending order request + "supportedISysSizes": [[2104, 1560]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 2, + "digitalGainLag": 0, + // There are 2 yuv color range mode, like full, reduced. + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "OV13B10_09B13_2M.IPU8.bin", + "graphSettingsType": "dispersed", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": [ "NVM", 1680], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { "Off": 0, "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1920, 1080], [1920, 1080]], + [[1280, 960], [1280, 960]], + [[1280, 720], [1280, 720]], + [[640, 480], [1280, 960]], + [[640, 360], [1280, 720]], + ], + "maxRequestsInflight": 5, + "faceEngineRunningInterval": 10, + "faceEngineRunningIntervalNoFace": 10, + "faceAeEnabled": false, + "runFaceWithSyncMode": false, + // pvl face detection:0, google facessd:1 + "faceEngineVendor": 1, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "unregisterExtDmaBuf": true, + "usingMockPSys": false, + } + ] + } +} diff --git a/config/linux/ipu8/sensors/ov13b10-wf.json b/config/linux/ipu8/sensors/ov13b10-wf.json new file mode 100644 index 0000000..ca1bf39 --- /dev/null +++ b/config/linux/ipu8/sensors/ov13b10-wf.json @@ -0,0 +1,315 @@ +// +// Copyright (C) 2025 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "CameraSettings": { + "Sensor": [ + { + "name": "ov13b10-wf", + "description": "ov13b10 as sensor.", + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [4208, 3120], + "format": "V4L2_PIX_FMT_SGRBG10", + "formats": [ + { + "name": "ov13b10 $I2CBUS", "pad": 0, "width": 4208, "height": 3120, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "pad": 0, "width": 4208, "height": 3120, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + } + ], + "link": [ + { + "srcName": "ov13b10 $I2CBUS", "srcPad": 0, "sinkName": "Intel IPU7 CSI2 $CSI_PORT", + "sinkPad": 0, "enable": true + }, + { + "srcName": "Intel IPU7 CSI2 $CSI_PORT", "srcPad": 1, + "sinkName": "Intel IPU7 ISYS Capture $CAP_N", "sinkPad": 0, "enable": true + } + ], + "videonode": [ + { + "name": "Intel IPU7 ISYS Capture $CAP_N", "videoNodeType": "VIDEO_GENERIC" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "videoNodeType": "VIDEO_ISYS_RECEIVER" + }, + { + "name": "ov13b10 $I2CBUS", "videoNodeType": "VIDEO_PIXEL_ARRAY" + } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { + "format": "V4L2_PIX_FMT_NV12", "size": [4096, 3072], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [3840, 2160], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [320, 240], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [4096, 3072], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [3840, 2160], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [320, 240], "field": 0, "mcId": 0 + }, + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", "MANUAL_WHITE_BALANCE", "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", "PER_FRAME_CONTROL", "SCENE_MODE" ], + "fpsRange": [ 15, 15, 24, 24, 15, 30, 30, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ "AUTO", "MANUAL" ], + "supportedVideoStabilizationModes": ["OFF"], + "supportedSceneMode": ["NORMAL"], + "supportedAntibandingMode": [ "AUTO", "50Hz", "60Hz", "OFF" ], + "supportedAwbMode": [ "AUTO", "INCANDESCENT", "FLUORESCENT", "DAYLIGHT", "FULL_OVERCAST", + "PARTLY_OVERCAST", "SUNSET", "VIDEO_CONFERENCE", "MANUAL_CCT_RANGE", "MANUAL_WHITE_POINT", + "MANUAL_GAIN", "MANUAL_COLOR_TRANSFORM" ], + "supportedAfMode": [ "AUTO", "MACRO", "CONTINUOUS_VIDEO", "CONTINUOUS_PICTURE", "OFF" ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + "control.enableZsl": [1], + // 0: OFF, 1: SMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [ 0 ], + "statistics.info.maxFaceCount" : [10], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [46, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 4208, 3120 ], + "sensor.info.pixelArraySize": [4208, 3120], + // 4208x1.12um 3120x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [2], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "scaler.availableMaxDigitalZoom": [ 16.0 ], + "sensor.opaqueRawSize": [4208, 3120, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 4096, 3072, 0, + 33, 3840, 2160, 0, + 33, 1920, 1080, 0, + 33, 1280, 960, 0, + 33, 1280, 720, 0, + 33, 640, 480, 0, + 33, 640, 360, 0, + 33, 320, 240, 0, + 35, 4096, 3072, 0, + 35, 3840, 2160, 0, + 35, 1920, 1080, 0, + 35, 1280, 960, 0, + 35, 1280, 720, 0, + 35, 640, 480, 0, + 35, 640, 360, 0, + 35, 320, 240, 0, + 34, 4096, 3072, 0, + 34, 3840, 2160, 0, + 34, 1920, 1080, 0, + 34, 1280, 960, 0, + 34, 1280, 720, 0, + 34, 640, 480, 0, + 34, 640, 360, 0, + 34, 320, 240, 0, + 34, 4096, 3072, 1, + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 4096, 3072, 66666666, + 33, 3840, 2160, 66666666, + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + 35, 4096, 3072, 66666666, + 35, 3840, 2160, 66666666, + 35, 1920, 1080, 33333333, + 35, 1280, 960, 33333333, + 35, 1280, 720, 33333333, + 35, 640, 480, 33333333, + 35, 640, 360, 33333333, + 35, 320, 240, 33333333, + 34, 4096, 3072, 66666666, + 34, 3840, 2160, 66666666, + 34, 1920, 1080, 33333333, + 34, 1280, 960, 33333333, + 34, 1280, 720, 33333333, + 34, 640, 480, 33333333, + 34, 640, 360, 33333333, + 34, 320, 240, 33333333, + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 4096, 3072, 66666666, + 33, 3840, 2160, 66666666, + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + ], + // 4096*3072*1.5 + "jpeg.maxSize": [18874368], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ ["NORMAL", "VIDEO", "ov13b10"], ["STILL_CAPTURE", "VIDEO", "ov13b10"]], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [[ "VIDEO", "DFLT", "DFLT", "DFLT", "DFLT" ]], + // ascending order request + "supportedISysSizes": [[4208, 3120]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 2, + "digitalGainLag": 0, + // There are 2 yuv color range mode, like full, reduced. + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "OV13B10_09B13.IPU8.bin", + "graphSettingsType": "dispersed", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": [ "NVM", 1680], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { "Off": 0, "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[2560, 1440], [2560, 1440]], + [[1920, 1440], [1920, 1440]], + [[1920, 1080], [1920, 1080]], + [[1280, 960], [1280, 960]], + [[1280, 720], [1280, 720]], + [[640, 480], [1280, 960]], + [[640, 360], [1280, 720]], + ], + "maxRequestsInflight": 5, + "faceEngineRunningInterval": 10, + "faceEngineRunningIntervalNoFace": 10, + "faceAeEnabled": false, + "runFaceWithSyncMode": false, + // pvl face detection:0, google facessd:1 + "faceEngineVendor": 1, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "unregisterExtDmaBuf": true, + "usingMockPSys": false, + } + ] + } +} diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 53aa03a..704296c 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -14,8 +14,4 @@ # limitations under the License. # - add_subdirectory(algowrapper) - -if (SUPPORT_LIVE_TUNING) - add_subdirectory(livetune) -endif() #SUPPORT_LIVE_TUNING +add_subdirectory(algowrapper) diff --git a/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp b/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp index 0c153c9..30abfb8 100644 --- a/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp +++ b/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp @@ -24,8 +24,10 @@ * this notice or any other notice embedded in Materials by Intel or Intels * suppliers or licensors in any way. */ + #include "FragmentsConfigurator.h" #include +#include Ipu8FragmentsConfigurator::Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node) : _staticGraph(staticGraph), _node(node) { @@ -509,14 +511,24 @@ StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsUpscaler(StaticGraph kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop - kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; } - uint16_t outputStartX = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? + uint16_t stripeStart = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? kernelFragments[stripe].fragmentStartX - resInfo->input_crop.left : 0); - outputStartX += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + stripeStart += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + auto scaleFactorFixed = static_cast(static_cast(scaleFactor * static_cast(1 << 16))) / static_cast(1 << 16); - outputStartX = GRA_ROUND_DOWN(static_cast(floor(static_cast(outputStartX) / scaleFactor)), 2); + float widthIn = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + float horizontalOffset = (static_cast(widthIn) - static_cast(scaleFactorFixed) * (static_cast(resInfo->output_width) - 1.0F)) / 2.0F; - _outputStartX[runKernel->kernel_uuid][stripe] = outputStartX; + auto nScaledPixelsMax = (static_cast(stripeStart) + 1.0f - horizontalOffset) / scaleFactorFixed; + auto nScaledPixels = std::ceil((static_cast(stripeStart) - horizontalOffset) / scaleFactorFixed); + + if (static_cast(nScaledPixels) % 2 != 0) + { + nScaledPixels = 2 * std::floor(nScaledPixelsMax / 2); + } + + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(nScaledPixels); } return StaticGraphStatus::SG_OK; diff --git a/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h b/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h index 30bb063..1eceba9 100644 --- a/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h +++ b/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h @@ -39,10 +39,6 @@ #include "Ipu8StaticGraphAutogen.h" #include "Ipu8StaticGraphTypesAutogen.h" #include "Ipu8GraphResolutionConfiguratorAutogen.h" -#elif defined(GRC_IPU9) -#include "Ipu9StaticGraphAutogen.h" -#include "Ipu9StaticGraphTypesAutogen.h" -#include "Ipu9GraphResolutionConfiguratorAutogen.h" #else #include "StaticGraphAutogen.h" #include "StaticGraphTypesAutogen.h" diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp index ac7e1d8..2a7c0ab 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h index d091130..992678c 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp index 2195b70..9a9ade3 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -979,16 +979,16 @@ void SwRemosaicOuterNode::Init(SwRemosaicOuterNodeConfiguration** selectedGraphC { OuterNode::Init(8, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); - uint16_t kernelsUuids[1] = {19706 /*sw_scaler*/}; - uint64_t kernelsRcbBitmap = 0x1; // { sw_scaler[0] } - uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{sw_scaler}[0] } - uint8_t systemApisSizes[1] = {5 /*sw_scaler*/}; + uint16_t kernelsUuids[1] = {8198 /*remosaic_1_0*/}; + uint64_t kernelsRcbBitmap = 0x0; // { } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{remosaic_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*remosaic_1_0*/}; for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) { nodeKernels.kernelList = kernelListOptions[i]; - InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, selectedGraphConfiguration[i]->systemApiConfiguration); + InitRunKernels(kernelsUuids, kernelsRcbBitmap, nullptr, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); } // set default inner Node @@ -21169,6 +21169,343 @@ StaticGraphStatus imageSubGraphTopology100051::configInnerNodes(SubGraphInnerNod return StaticGraphStatus::SG_OK; } +/* + * Graph 100058 + */ +StaticGraph100058::StaticGraph100058(GraphConfiguration100058** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100058, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100058[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwB2bOuterNodeConfiguration** swB2bOuterNodeConfigurationOptions = new SwB2bOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + swB2bOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swB2bOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swB2bOuterNode.Init(swB2bOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] swB2bOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwB2b; + link->destNode = &_swB2bOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SwB2b; + link->srcNode = &_swB2bOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.swB2bOuterNode = &_swB2bOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.swB2bOuterNode->contextId = 1; + _imageSubGraph.lbffBayerOuterNode->contextId = 2; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100058::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swB2bOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100058::~StaticGraph100058() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100058::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp)) == (noMp | noDp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp)) == (noMp | noDp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + + /* + * Link enablement by private inner options + */ + subGraphLinks[9]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[10]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[13]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[14]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + /* * Graph 100052 */ diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h index c7dc265..fe7598d 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -454,10 +454,8 @@ struct SwRemosaicOuterNodeConfiguration { uint32_t streamId = 0; uint8_t tuningMode = 0; - StaticGraphKernelRes resolutionInfos[1]; StaticGraphKernelRes resolutionHistories[1]; StaticGraphKernelBppConfiguration bppInfos[1]; - uint8_t systemApiConfiguration[5]; }; struct LbffDol2InputsBayerStatOuterNodeConfiguration @@ -795,6 +793,16 @@ struct GraphConfiguration100051 StaticGraphLinkConfiguration linkConfigurations[20]; }; +struct GraphConfiguration100058 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + SwB2bOuterNodeConfiguration swB2bOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + struct GraphConfiguration100052 { VirtualSinkMapping sinkMappingConfiguration; @@ -2468,7 +2476,7 @@ class StaticGraph100050 : public IStaticGraphConfig StaticGraph100050(GraphConfiguration100050** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); ~StaticGraph100050(); StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); - static const uint32_t hashCode = 3442380973; // autogenerated + static const uint32_t hashCode = 485560935; // autogenerated private: // Configuration @@ -2535,6 +2543,48 @@ class StaticGraph100051 : public IStaticGraphConfig GraphLink _graphLinks[20]; }; +class imageSubGraphTopology100058 : public GraphTopology { + +public: + imageSubGraphTopology100058(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + SwB2bOuterNode* swB2bOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100058 : public IStaticGraphConfig +{ +public: + StaticGraph100058(GraphConfiguration100058** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100058(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 1198660673; // autogenerated + +private: + // Configuration + GraphConfiguration100058* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + SwB2bOuterNode _swB2bOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100058 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + class imageSubGraphTopology100052 : public GraphTopology { public: diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h index e580d45..b202fc8 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -69,6 +69,7 @@ enum class GraphConfigurationKeyAttributes : uint32_t WFov = 0x00000200, DocScan = 0x00000400, StillsModeCpHdr = 0x00000800, + B2bActive = 0x00001000, }; struct GraphConfigurationKey { diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c index e380537..fdb5892 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h index a1a6da4..98d791c 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -96,7 +96,7 @@ typedef struct DataRange }DataRange; -static int distinctGraphsCount = 37; +static int distinctGraphsCount = 38; static GraphHashCode hashCodeLookup[] = { {0, 0x4229ABEE}, @@ -129,14 +129,15 @@ static GraphHashCode hashCodeLookup[] = { {100041, 0xF421B02D}, {100042, 0x8397E143}, {100044, 0xA6CC44DD}, - {100050, 0xCD2E90AD}, + {100050, 0x1CF11267}, {100051, 0x8AADA153}, {100052, 0x6435159F}, {100053, 0x246C440B}, {100054, 0x675F6431}, {100055, 0x76EBC27D}, {100056, 0x113143AB}, - {100057, 0xF421B02D} + {100057, 0xF421B02D}, + {100058, 0x47721C41} }; static FrameFormatDesc formatsDB[] = { diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp index bfe7c0e..b175435 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -540,6 +540,17 @@ StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& *graph = new StaticGraph100051( reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); break; + case 100058: + if (StaticGraph100058::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100058( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; case 100052: if (StaticGraph100052::hashCode != selectedGraphConfigurationHeader->graphHashCode) { diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h index 036cc39..a995215 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h index f538530..d10e832 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp index d7786d1..81be764 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -608,7 +608,7 @@ TerminalDescriptor SW_REMOSAICTerminalDesc[] = PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, - 19706, // sw_scaler + 8198, // remosaic_1_0 }, { SW_REMOSAIC_TERMINAL_CONNECT_OUTPUT, @@ -617,7 +617,7 @@ TerminalDescriptor SW_REMOSAICTerminalDesc[] = PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, - 19706, // sw_scaler + 8198, // remosaic_1_0 }, }; diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h index ad9cf96..2f0e951 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp b/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp index 0c153c9..30abfb8 100644 --- a/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp +++ b/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp @@ -24,8 +24,10 @@ * this notice or any other notice embedded in Materials by Intel or Intels * suppliers or licensors in any way. */ + #include "FragmentsConfigurator.h" #include +#include Ipu8FragmentsConfigurator::Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node) : _staticGraph(staticGraph), _node(node) { @@ -509,14 +511,24 @@ StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsUpscaler(StaticGraph kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop - kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; } - uint16_t outputStartX = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? + uint16_t stripeStart = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? kernelFragments[stripe].fragmentStartX - resInfo->input_crop.left : 0); - outputStartX += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + stripeStart += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + auto scaleFactorFixed = static_cast(static_cast(scaleFactor * static_cast(1 << 16))) / static_cast(1 << 16); - outputStartX = GRA_ROUND_DOWN(static_cast(floor(static_cast(outputStartX) / scaleFactor)), 2); + float widthIn = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + float horizontalOffset = (static_cast(widthIn) - static_cast(scaleFactorFixed) * (static_cast(resInfo->output_width) - 1.0F)) / 2.0F; - _outputStartX[runKernel->kernel_uuid][stripe] = outputStartX; + auto nScaledPixelsMax = (static_cast(stripeStart) + 1.0f - horizontalOffset) / scaleFactorFixed; + auto nScaledPixels = std::ceil((static_cast(stripeStart) - horizontalOffset) / scaleFactorFixed); + + if (static_cast(nScaledPixels) % 2 != 0) + { + nScaledPixels = 2 * std::floor(nScaledPixelsMax / 2); + } + + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(nScaledPixels); } return StaticGraphStatus::SG_OK; diff --git a/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h b/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h index 30bb063..1eceba9 100644 --- a/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h +++ b/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h @@ -39,10 +39,6 @@ #include "Ipu8StaticGraphAutogen.h" #include "Ipu8StaticGraphTypesAutogen.h" #include "Ipu8GraphResolutionConfiguratorAutogen.h" -#elif defined(GRC_IPU9) -#include "Ipu9StaticGraphAutogen.h" -#include "Ipu9StaticGraphTypesAutogen.h" -#include "Ipu9GraphResolutionConfiguratorAutogen.h" #else #include "StaticGraphAutogen.h" #include "StaticGraphTypesAutogen.h" diff --git a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp index bab73bd..5cb9d50 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -66,6 +66,11 @@ uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink hwSi case 100005: // Bayer_NoPdaf_WithNntm_WithTnr case 100040: // Bayer_WithPdaf3_WithNntm_WithTnr return 46539; // nntm_1_0 + case 100044: // Bayer_NoPdaf_WithTnr_WithDeskView + case 100046: // Bayer_NoPdaf_WithTnr_WithDeskViewNoBlend + return 39181; // deskview_1_0 + case 100045: // Bayer_NoPdaf_WithNntm_WithTnr_WithRotation + return 36947; // rotator_1_0 case 100031: // Dol2Inputs_NoGmv_NoTnr if (links[16]->isActive) return 37003; // tm_app if (links[20]->isActive) return 46539; // nntm_1_0 @@ -110,6 +115,8 @@ StaticGraphStatus GraphResolutionConfiguratorHelper::getRunKernelUuidForResHisto kernelUuids.push_back(19706); // sw_scaler kernelUuids.push_back(46539); // nntm_1_0 kernelUuids.push_back(37003); // tm_app + kernelUuids.push_back(39181); // deskview_1_0 + kernelUuids.push_back(36947); // rotator_1_0 return StaticGraphStatus::SG_OK; } diff --git a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h index f1384ba..7923f2c 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp index 0528949..dca6e2d 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -935,6 +935,66 @@ void SwImvOuterNode::Init(SwImvOuterNodeConfiguration** selectedGraphConfigurati setInnerNode(None); } +void SwDeskviewOuterNode::Init(SwDeskviewOuterNodeConfiguration** selectedGraphConfiguration, uint32_t nodeKernelConfigurationsOptionsCount) +{ + OuterNode::Init(11, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); + + uint16_t kernelsUuids[1] = {39181 /*deskview_1_0*/}; + uint64_t kernelsRcbBitmap = 0x1; // { deskview_1_0[0] } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{deskview_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*deskview_1_0*/}; + + for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) + { + nodeKernels.kernelList = kernelListOptions[i]; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); + } + + // set default inner Node + setInnerNode(None); +} + +void SwRotationOuterNode::Init(SwRotationOuterNodeConfiguration** selectedGraphConfiguration, uint32_t nodeKernelConfigurationsOptionsCount) +{ + OuterNode::Init(10, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); + + uint16_t kernelsUuids[1] = {36947 /*rotator_1_0*/}; + uint64_t kernelsRcbBitmap = 0x1; // { rotator_1_0[0] } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{rotator_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*rotator_1_0*/}; + + for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) + { + nodeKernels.kernelList = kernelListOptions[i]; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); + } + + // set default inner Node + setInnerNode(None); +} + +void SwDeskviewNoblendOuterNode::Init(SwDeskviewNoblendOuterNodeConfiguration** selectedGraphConfiguration, uint32_t nodeKernelConfigurationsOptionsCount) +{ + OuterNode::Init(11, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); + + uint16_t kernelsUuids[1] = {39181 /*deskview_1_0*/}; + uint64_t kernelsRcbBitmap = 0x1; // { deskview_1_0[0] } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{deskview_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*deskview_1_0*/}; + + for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) + { + nodeKernels.kernelList = kernelListOptions[i]; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); + } + + // set default inner Node + setInnerNode(None); +} + /* * Inner Nodes Setters */ @@ -8496,6 +8556,27 @@ void SwImvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) (void)nodeInnerOptions; } +void SwDeskviewOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwRotationOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwDeskviewNoblendOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + /* * Graph 100000 */ @@ -18598,3 +18679,1190 @@ StaticGraphStatus imageSubGraphTopology100042::configInnerNodes(SubGraphInnerNod return StaticGraphStatus::SG_OK; } +/* + * Graph 100044 + */ +StaticGraph100044::StaticGraph100044(GraphConfiguration100044** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100044, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100044[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwDeskviewOuterNodeConfiguration** swDeskviewOuterNodeConfigurationOptions = new SwDeskviewOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwScalerOuterNodeConfiguration** swScalerOuterNodeConfigurationOptions = new SwScalerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + swDeskviewOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swDeskviewOuterNodeConfiguration; + swScalerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swScalerOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swDeskviewOuterNode.Init(swDeskviewOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swScalerOuterNode.Init(swScalerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + delete[] swDeskviewOuterNodeConfigurationOptions; + delete[] swScalerOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 3; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 6; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::ImagePpp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::SwDeskview; + link->destNode = &_swDeskviewOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::SwDeskview; + link->destNode = &_swDeskviewOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwDeskview; + link->srcNode = &_swDeskviewOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwDeskview; + link->srcNode = &_swDeskviewOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + _imageSubGraph.swDeskviewOuterNode = &_swDeskviewOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerOuterNode->contextId = 1; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 2; + _imageSubGraph.swDeskviewOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100044::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swDeskviewOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swScalerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100044::~StaticGraph100044() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100044::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noPpp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> sw_deskview:terminal_connect_input + subGraphLinks[14]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + subGraphLinks[17]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> sw_deskview:terminal_connect_input + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noPpp); // bbps_WithTnr:bbps_ofs_pp_yuvn_odr -> image_ppp + + /* + * Link enablement by private inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[10]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100045 + */ +StaticGraph100045::StaticGraph100045(GraphConfiguration100045** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100045, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100045[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwNntmOuterNodeConfiguration** swNntmOuterNodeConfigurationOptions = new SwNntmOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwRotationOuterNodeConfiguration** swRotationOuterNodeConfigurationOptions = new SwRotationOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwScalerOuterNodeConfiguration** swScalerOuterNodeConfigurationOptions = new SwScalerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + swNntmOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swNntmOuterNodeConfiguration; + swRotationOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swRotationOuterNodeConfiguration; + swScalerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swScalerOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swNntmOuterNode.Init(swNntmOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swRotationOuterNode.Init(swRotationOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swScalerOuterNode.Init(swScalerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + delete[] swNntmOuterNodeConfigurationOptions; + delete[] swRotationOuterNodeConfigurationOptions; + delete[] swScalerOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 3; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 6; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::ImagePpp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwRotation; + link->destNode = &_swRotationOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwRotation; + link->srcNode = &_swRotationOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwRotation; + link->srcNode = &_swRotationOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swRotationOuterNode = &_swRotationOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerOuterNode->contextId = 1; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swRotationOuterNode->contextId = 4; + _imageSubGraph.swScalerOuterNode->contextId = 5; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100045::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swNntmOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swRotationOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swScalerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100045::~StaticGraph100045() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100045::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noPpp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + subGraphLinks[17]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> sw_nntm:terminal_connect_input + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noPpp); // bbps_WithTnr:bbps_ofs_pp_yuvn_odr -> image_ppp + + /* + * Link enablement by private inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[10]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100046 + */ +StaticGraph100046::StaticGraph100046(GraphConfiguration100046** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100046, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100046[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwDeskviewNoblendOuterNodeConfiguration** swDeskviewNoblendOuterNodeConfigurationOptions = new SwDeskviewNoblendOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwScalerOuterNodeConfiguration** swScalerOuterNodeConfigurationOptions = new SwScalerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + swDeskviewNoblendOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swDeskviewNoblendOuterNodeConfiguration; + swScalerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swScalerOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swDeskviewNoblendOuterNode.Init(swDeskviewNoblendOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swScalerOuterNode.Init(swScalerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + delete[] swDeskviewNoblendOuterNodeConfigurationOptions; + delete[] swScalerOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 3; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 6; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::ImagePpp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::SwDeskviewNoblend; + link->destNode = &_swDeskviewNoblendOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::SwDeskviewNoblend; + link->destNode = &_swDeskviewNoblendOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwDeskviewNoblend; + link->srcNode = &_swDeskviewNoblendOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwDeskviewNoblend; + link->srcNode = &_swDeskviewNoblendOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + _imageSubGraph.swDeskviewNoblendOuterNode = &_swDeskviewNoblendOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerOuterNode->contextId = 1; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 2; + _imageSubGraph.swDeskviewNoblendOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100046::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swDeskviewNoblendOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swScalerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100046::~StaticGraph100046() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100046::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noPpp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> sw_deskview_noblend:terminal_connect_input + subGraphLinks[14]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + subGraphLinks[17]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> sw_deskview_noblend:terminal_connect_input + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noPpp); // bbps_WithTnr:bbps_ofs_pp_yuvn_odr -> image_ppp + + /* + * Link enablement by private inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[10]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h index 7e29d8f..15ebffa 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -440,6 +440,33 @@ struct SwImvOuterNodeConfiguration uint8_t systemApiConfiguration[5]; }; +struct SwDeskviewOuterNodeConfiguration +{ + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct SwRotationOuterNodeConfiguration +{ + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct SwDeskviewNoblendOuterNodeConfiguration +{ + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + struct GraphConfiguration100000 { VirtualSinkMapping sinkMappingConfiguration; @@ -712,6 +739,40 @@ struct GraphConfiguration100042 SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; StaticGraphLinkConfiguration linkConfigurations[21]; }; + +struct GraphConfiguration100044 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + SwDeskviewOuterNodeConfiguration swDeskviewOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100045 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwRotationOuterNodeConfiguration swRotationOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100046 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + SwDeskviewNoblendOuterNodeConfiguration swDeskviewNoblendOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; #pragma pack(pop) class IsysOuterNode : public OuterNode @@ -965,6 +1026,33 @@ class SwImvOuterNode : public OuterNode void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwDeskviewOuterNode : public OuterNode +{ +public: + SwDeskviewOuterNode(): OuterNode(){} + void Init(SwDeskviewOuterNodeConfiguration** selectedGraphConfigurations, uint32_t kernelConfigurationsOptionsCount); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + +}; +class SwRotationOuterNode : public OuterNode +{ +public: + SwRotationOuterNode(): OuterNode(){} + void Init(SwRotationOuterNodeConfiguration** selectedGraphConfigurations, uint32_t kernelConfigurationsOptionsCount); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + +}; +class SwDeskviewNoblendOuterNode : public OuterNode +{ +public: + SwDeskviewNoblendOuterNode(): OuterNode(){} + void Init(SwDeskviewNoblendOuterNodeConfiguration** selectedGraphConfigurations, uint32_t kernelConfigurationsOptionsCount); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + }; class imageSubGraphTopology100000 : public GraphTopology { @@ -2211,4 +2299,138 @@ class StaticGraph100042 : public IStaticGraphConfig GraphLink _graphLinks[21]; }; +class imageSubGraphTopology100044 : public GraphTopology { + +public: + imageSubGraphTopology100044(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + SwDeskviewOuterNode* swDeskviewOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100044 : public IStaticGraphConfig +{ +public: + StaticGraph100044(GraphConfiguration100044** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100044(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 2537139917; // autogenerated + +private: + // Configuration + GraphConfiguration100044* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + SwDeskviewOuterNode _swDeskviewOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100044 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100045 : public GraphTopology { + +public: + imageSubGraphTopology100045(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwRotationOuterNode* swRotationOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100045 : public IStaticGraphConfig +{ +public: + StaticGraph100045(GraphConfiguration100045** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100045(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 3023165183; // autogenerated + +private: + // Configuration + GraphConfiguration100045* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwRotationOuterNode _swRotationOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100045 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100046 : public GraphTopology { + +public: + imageSubGraphTopology100046(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + SwDeskviewNoblendOuterNode* swDeskviewNoblendOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100046 : public IStaticGraphConfig +{ +public: + StaticGraph100046(GraphConfiguration100046** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100046(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 2537139917; // autogenerated + +private: + // Configuration + GraphConfiguration100046* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + SwDeskviewNoblendOuterNode _swDeskviewNoblendOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100046 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + #endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h index 7bda8e7..bbaca1b 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c index f54fc69..ade36db 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h index 360d764..c157b11 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -96,7 +96,7 @@ typedef struct DataRange }DataRange; -static int distinctGraphsCount = 28; +static int distinctGraphsCount = 31; static GraphHashCode hashCodeLookup[] = { {0, 0xB38204DB}, @@ -127,7 +127,10 @@ static GraphHashCode hashCodeLookup[] = { {100039, 0x7B1EE4DB}, {100040, 0xC052F97D}, {100041, 0xF606DE19}, - {100042, 0x6C88AC89} + {100042, 0x6C88AC89}, + {100044, 0x9739AECD}, + {100045, 0xB431D6FF}, + {100046, 0x9739AECD} }; static FrameFormatDesc formatsDB[] = { diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp index a7fb20a..c461d65 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -507,6 +507,39 @@ StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& *graph = new StaticGraph100042( reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); break; + case 100044: + if (StaticGraph100044::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100044( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100045: + if (StaticGraph100045::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100045( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100046: + if (StaticGraph100046::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100046( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; default: delete[] selectedConfigurationData; delete[] selectedGraphConfigurationHeaders; diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h index 6dbd970..7866e9e 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h index 79ef325..e11cb43 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -67,6 +67,8 @@ enum class NodeResourceId : uint8_t { SwScaler = 7, SwVai = 8, SwImv = 9, + SwRotation = 10, + SwDeskview = 11, }; enum class StaticGraphStatus : uint8_t @@ -345,6 +347,9 @@ enum class GraphElementType : uint8_t { LbffIrWithGmvIrStream, SwVai, SwImv, + SwDeskview, + SwRotation, + SwDeskviewNoblend, }; enum class LinkType : uint8_t { diff --git a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp index 031d92e..e82e851 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -625,6 +625,68 @@ TerminalDescriptor SW_IMVTerminalDesc[] = }, }; +TerminalDescriptor SW_ROTATIONTerminalDesc[] = +{ + { + SW_ROTATION_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 36947, // rotator_1_0 + }, + { + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + +TerminalDescriptor SW_DESKVIEWTerminalDesc[] = +{ + { + SW_DESKVIEW_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 39181, // deskview_1_0 + }, + { + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + int CountOfSW_ISYSTerminalDesc = sizeof(SW_ISYSTerminalDesc) / sizeof(SW_ISYSTerminalDesc[0]); int CountOfLBFFTerminalDesc = sizeof(LBFFTerminalDesc) / sizeof(LBFFTerminalDesc[0]); int CountOfBBPSTerminalDesc = sizeof(BBPSTerminalDesc) / sizeof(BBPSTerminalDesc[0]); @@ -635,3 +697,5 @@ int CountOfSW_NNTMTerminalDesc = sizeof(SW_NNTMTerminalDesc) / sizeof(SW_NNTMTer int CountOfSW_SCALERTerminalDesc = sizeof(SW_SCALERTerminalDesc) / sizeof(SW_SCALERTerminalDesc[0]); int CountOfSW_VAITerminalDesc = sizeof(SW_VAITerminalDesc) / sizeof(SW_VAITerminalDesc[0]); int CountOfSW_IMVTerminalDesc = sizeof(SW_IMVTerminalDesc) / sizeof(SW_IMVTerminalDesc[0]); +int CountOfSW_ROTATIONTerminalDesc = sizeof(SW_ROTATIONTerminalDesc) / sizeof(SW_ROTATIONTerminalDesc[0]); +int CountOfSW_DESKVIEWTerminalDesc = sizeof(SW_DESKVIEWTerminalDesc) / sizeof(SW_DESKVIEWTerminalDesc[0]); diff --git a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h index 45fa3ef..c26e481 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -176,6 +176,20 @@ enum SW_IMVTerminalID SW_IMV_TERMINAL_CONNECT_OUTPUT_2, }; +enum SW_ROTATIONTerminalID +{ + SW_ROTATION_TERMINAL_CONNECT_INPUT, + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_1, + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_2, +}; + +enum SW_DESKVIEWTerminalID +{ + SW_DESKVIEW_TERMINAL_CONNECT_INPUT, + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_1, + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_2, +}; + extern TerminalDescriptor SW_ISYSTerminalDesc[]; extern TerminalDescriptor LBFFTerminalDesc[]; extern TerminalDescriptor BBPSTerminalDesc[]; @@ -186,6 +200,8 @@ extern TerminalDescriptor SW_NNTMTerminalDesc[]; extern TerminalDescriptor SW_SCALERTerminalDesc[]; extern TerminalDescriptor SW_VAITerminalDesc[]; extern TerminalDescriptor SW_IMVTerminalDesc[]; +extern TerminalDescriptor SW_ROTATIONTerminalDesc[]; +extern TerminalDescriptor SW_DESKVIEWTerminalDesc[]; extern int CountOfSW_ISYSTerminalDesc; extern int CountOfLBFFTerminalDesc; @@ -197,3 +213,5 @@ extern int CountOfSW_NNTMTerminalDesc; extern int CountOfSW_SCALERTerminalDesc; extern int CountOfSW_VAITerminalDesc; extern int CountOfSW_IMVTerminalDesc; +extern int CountOfSW_ROTATIONTerminalDesc; +extern int CountOfSW_DESKVIEWTerminalDesc; diff --git a/modules/ipu_desc/ipu8/CBLayoutUtils.cpp b/modules/ipu_desc/ipu8/CBLayoutUtils.cpp new file mode 100644 index 0000000..8336457 --- /dev/null +++ b/modules/ipu_desc/ipu8/CBLayoutUtils.cpp @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG CBLayoutUtils + +#include "CBLayoutUtils.h" + +#include +#include + +#include "lbff_ids_array.h" +#include "ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h" +#include "ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h" + +namespace icamera { +namespace CBLayoutUtils { + +static const std::set> s3AStatsTerminalSet = { + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AE_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_PDAF_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT), +}; + +static const std::set> sMetaDataTerminalSet = { + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_LSC_INPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AE_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_PDAF_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT), +}; + +// See ia_statistics_buffer_type in imaging-control/include/ia_types.h +#define NUM_STATISTICS_BUFFER_TYPES 8 + +static const int32_t kStatsBufToTermIds[NUM_STATISTICS_BUFFER_TYPES] = +{ + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, // rgbs_std + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, // rgbs_sve + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, // rgbs_sat + LBFF_TERMINAL_CONNECT_AE_OUTPUT, // ae_histogram + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, // af_std + -1, // af_sve (not supported) + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, // pdaf_out + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT // gmv_match_out +}; + +bool isMetaDataTerminal(uint8_t resourceId, uint8_t terminalId) { + if (sMetaDataTerminalSet.find(std::make_pair(resourceId, terminalId)) != + sMetaDataTerminalSet.end()) { + return true; + } + + return false; +} + +bool is3AStatsTerminal(uint8_t resourceId, uint8_t terminalId) { + if (s3AStatsTerminalSet.find(std::make_pair(resourceId, terminalId)) != + s3AStatsTerminalSet.end()) { + return true; + } + + return false; +} + +bool isFrameTerminal(uint8_t resourceId, uint8_t terminalId) { + const TerminalDescriptor* table = nullptr; + uint32_t count = 0; + getCbTerminalDescriptors(resourceId, table, count); + if (!table) return false; + for (uint32_t i = 0; i < count; i++) { + if (terminalId == table[i].TerminalId) { + return table[i].TerminalBufferType == TERMINAL_BUFFER_TYPE_DATA; + } + } + + return false; +} + +int32_t getKernelForDataTerminal(uint8_t resourceId, uint8_t terminalId) { + const TerminalDescriptor* table = nullptr; + uint32_t count = 0; + getCbTerminalDescriptors(resourceId, table, count); + if (!table) return 0; + for (uint32_t i = 0; i < count; i++) { + if (terminalId == table[i].TerminalId) { + return table[i].TerminalLinkedKernel; + } + } + return 0; +} + +status_t getCbTerminalDescriptors(uint8_t resourceId, + const TerminalDescriptor *&descriptors, uint32_t &count) { + status_t ret = OK; + + switch (resourceId) { + case NODE_RESOURCE_ID_LBFF: + descriptors = LBFFTerminalDesc; + count = CountOfLBFFTerminalDesc; + break; + default: + ret = INVALID_OPERATION; + descriptors = nullptr; + count = 0; + break; + } + + return ret; +} + +const TerminalDescriptor *getTerminalDescriptor(uint8_t resourceId, uint8_t terminalId) { + status_t ret = OK; + + const TerminalDescriptor *descriptors = nullptr; + const TerminalDescriptor *descriptor = nullptr; + uint32_t count = 0; + + ret = getCbTerminalDescriptors(resourceId, descriptors, count); + if (ret != OK) return nullptr; + + if (terminalId < count) { + descriptor = &descriptors[terminalId]; + } + + return descriptor; +} + +PacBufferType getTerminalPacBufferType(uint8_t resourceId, uint8_t terminalId) { + const TerminalDescriptor *descriptor = getTerminalDescriptor(resourceId, terminalId); + if (descriptor) { + return descriptor->PacBufferType; + } + + return PAC_BUFFER_TYPE_NONE; +} + +static const payload_descriptor_t *sLBCBPayloadDescriptors[] = { + &lbff_0_descriptors, // TERMINAL_LOAD_ALGO_CACHED + &lbff_1_descriptors, // TERMINAL_LOAD_ALGO_FRAG_SEQ + &lbff_2_descriptors, // TERMINAL_LOAD_SYSTEM + &lbff_3_descriptors, // DOL, TNR and CAS +}; + +status_t getCbPayloadDescriptor(uint8_t resourceId, + const payload_descriptor_t ***cbPayloadDescriptor, + uint32_t &count) { + status_t ret = OK; + + switch (resourceId) { + case NODE_RESOURCE_ID_LBFF: + *cbPayloadDescriptor = sLBCBPayloadDescriptors; + count = sizeof(sLBCBPayloadDescriptors) / sizeof(sLBCBPayloadDescriptors[0]); + break; + default: + *cbPayloadDescriptor = nullptr; + count = 0; + ret = INVALID_OPERATION; + break; + } + + return ret; +} + +int cbDeviceId2Uuid(uint8_t resourceId, uint32_t deviceId) { + int uuid = -1; + switch (resourceId) { + case NODE_RESOURCE_ID_LBFF: + uuid = lbff_id_to_uuid_tag[deviceId]; + break; + default: + break; + } + + return uuid; +} + +const int32_t* getStatsBufToTermIds() { + return kStatsBufToTermIds; +} + +uint32_t getIspIfdKernelId() { + return ia_pal_uuid_isp_ifd_pipe_1_4; +} + +} // namespace CBLayoutUtils +} // namespace icamera diff --git a/modules/ipu_desc/ipu8/CBLayoutUtils.h b/modules/ipu_desc/ipu8/CBLayoutUtils.h new file mode 100644 index 0000000..72e1557 --- /dev/null +++ b/modules/ipu_desc/ipu8/CBLayoutUtils.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +#include "iutils/Errors.h" +#include "cb_payload_descriptor.h" +#if defined(GRC_IPU7X) +#include "Ipu7xTerminalDescriptorAutogen.h" +#elif defined(GRC_IPU75XA) +#include "Ipu75xaTerminalDescriptorAutogen.h" +#elif defined(GRC_IPU8) +#include "Ipu8TerminalDescriptorAutogen.h" +#else +#include "TerminalDescriptorAutogen.h" +#endif + +namespace icamera { + +typedef enum _NodeResourceIdType +{ + NODE_RESOURCE_ID_LBFF = 0, + NODE_RESOURCE_ID_ISYS = 1 +} NodeResourceIdType; + +namespace CBLayoutUtils { + +status_t getCbTerminalDescriptors(uint8_t resourceId, + const TerminalDescriptor *&descriptors, uint32_t &count); +const TerminalDescriptor *getTerminalDescriptor(uint8_t resourceId, uint8_t terminalId); +PacBufferType getTerminalPacBufferType(uint8_t resourceId, uint8_t terminalId); +bool isMetaDataTerminal(uint8_t resourceId, uint8_t terminalId); +bool is3AStatsTerminal(uint8_t resourceId, uint8_t terminalId); +bool isFrameTerminal(uint8_t resourceId, uint8_t terminalId); +int32_t getKernelForDataTerminal(uint8_t resourceId, uint8_t terminalId); + +status_t getCbPayloadDescriptor(uint8_t resourceId, + const payload_descriptor_t ***cbPayloadDescriptor, + uint32_t &count); +int cbDeviceId2Uuid(uint8_t resourceId, uint32_t deviceId); + +const int32_t* getStatsBufToTermIds(); + +uint32_t getIspIfdKernelId(); +} // namespace CBLayoutUtils +} // namespace icamera diff --git a/modules/ipu_desc/ipu8/FragmentsConfigurator.cpp b/modules/ipu_desc/ipu8/FragmentsConfigurator.cpp new file mode 100644 index 0000000..30abfb8 --- /dev/null +++ b/modules/ipu_desc/ipu8/FragmentsConfigurator.cpp @@ -0,0 +1,969 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "FragmentsConfigurator.h" +#include +#include + +Ipu8FragmentsConfigurator::Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node) : _staticGraph(staticGraph), _node(node) +{ +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configureFragments(std::vector& smurfKernels) +{ + if (_staticGraph == nullptr || _node == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // Reset status + for (int32_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + _node->fragmentVanishStatus[stripe] = VanishOption::Full; + } + + StaticGraphStatus res = StaticGraphStatus::SG_OK; + + const uint16_t* kenelConfigOrder = _node->getRunKernelConfigOrder(); + + for (uint16_t i = 0; i < _node->nodeKernels.kernelCount; i++) + { + uint16_t j = kenelConfigOrder[i]; + StaticGraphRunKernel* runKernel = &_node->nodeKernels.kernelList[j].run_kernel; + StaticGraphFragmentDesc* kernelFragments = _node->nodeKernels.kernelList[j].fragment_descs; + // Take previous kernel as reference, unless we will change it below. + StaticGraphFragmentDesc* prevKernelFragments = j == 0 ? nullptr : _node->nodeKernels.kernelList[j - 1].fragment_descs; + uint32_t prevKernelUuid = j == 0 ? 0 : _node->nodeKernels.kernelList[j - 1].run_kernel.kernel_uuid; + + uint32_t referenceKernel = GraphResolutionConfiguratorHelper::getReferenceKernel(runKernel->kernel_uuid); + if (referenceKernel != 0) + { + // Special reference kernel + for (uint32_t k = 0; k < _node->nodeKernels.kernelCount; k++) + { + if (_node->nodeKernels.kernelList[k].run_kernel.kernel_uuid == referenceKernel) + { + prevKernelFragments = _node->nodeKernels.kernelList[k].fragment_descs; + prevKernelUuid = referenceKernel; + break; + } + } + } + + // Find the handling function for this kernel + GraphResolutionConfiguratorKernelRole kernelRole = GraphResolutionConfiguratorHelper::getKernelRole(runKernel->kernel_uuid); + + switch (kernelRole) + { + case GraphResolutionConfiguratorKernelRole::DownScaler: + { + res = configFragmentsDownscaler(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::EspaCropper: + { + res = configFragmentsCropper(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::UpScaler: + { + res = configFragmentsUpscaler(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::Output: + { + res = configFragmentsOutput(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments, false); + break; + } + + case GraphResolutionConfiguratorKernelRole::TnrOutput: + { + res = configFragmentsOutput(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments, true); + break; + } + + case GraphResolutionConfiguratorKernelRole::TnrScaler: + { + res = configFragmentsTnrScaler(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::TnrFeederFull: + case GraphResolutionConfiguratorKernelRole::TnrFeederSmall: + { + res = configFragmentsTnrFeeder(runKernel, kernelFragments, kernelRole); + break; + } + + case GraphResolutionConfiguratorKernelRole::Smurf: + { + res = configFragmentsSmurf(runKernel, kernelFragments, prevKernelFragments, smurfKernels); + break; + } + + case GraphResolutionConfiguratorKernelRole::SmurfFeeder: + { + res = configFragmentsSmurfFeeder(runKernel, kernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::NonRcb: + { + // Before zoom kernels - take prev kernel fragments as-is + res = copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + } + + default: + { + // No action for other kernels + break; + } + } + + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsDownscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + auto resInfo = runKernel->resolution_info; + + auto scaleFactorW = static_cast(resInfo->output_width) / (resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + auto scaleFactorH = static_cast(resInfo->output_height) / (resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom); + auto scaleFactor = std::max(scaleFactorW, scaleFactorH); + + for (int32_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + int rightCrop = stripe == static_cast(_node->numberOfFragments - 1) ? resInfo->input_crop.right : 0; + + double value = (static_cast(kernelFragments[stripe].fragmentInputWidth - rightCrop) * scaleFactor) / 4; + kernelFragments[stripe].fragmentOutputWidth = static_cast(floor(value)) * 4; + + // Start of output is rounded up since this is what b2i_ds does (Creates pixels starting from the pixel after) + value = (scaleFactor * kernelFragments[stripe].fragmentStartX) / 2; + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(ceil(value)) * 2; + + // Check if pixels are missing in the last stripe + if (stripe == _node->numberOfFragments - 1) + { + if (_outputStartX[runKernel->kernel_uuid][stripe] + kernelFragments[stripe].fragmentOutputWidth < resInfo->output_width) + { + if (validateDownscalerOutputWidth(&(kernelFragments[stripe]), 4, stripe, scaleFactor, runKernel)) + { + kernelFragments[stripe].fragmentOutputWidth += 4; + } + } + } + } + + return StaticGraphStatus::SG_OK; +} + +bool Ipu8FragmentsConfigurator::validateDownscalerOutputWidth(StaticGraphFragmentDesc* stripe, uint16_t addition, int32_t stripeIndex, double scaleFactor, StaticGraphRunKernel* runKernel) +{ + const double ratio_prec = 1U << GraphResolutionConfigurator::SCALE_PREC; + + int scaling_ratio = (int)ceil((1 / scaleFactor) * (double)(1U << GraphResolutionConfigurator::SCALE_PREC)); + const double scaling_ratio_f = static_cast(scaling_ratio) / ratio_prec; + + int32_t offset_common = ((scaling_ratio - (static_cast(1U) << GraphResolutionConfigurator::SCALE_PREC)) >> 1); + + uint32_t orig_horizontal_offset; + if (stripeIndex == 0) + { + orig_horizontal_offset = (runKernel->resolution_info->input_crop.left << GraphResolutionConfigurator::SCALE_PREC) + offset_common; + } + else + { + orig_horizontal_offset = offset_common; + } + const uint16_t fragment_start_x = stripe->fragmentStartX; + const double calc = ceil((static_cast(fragment_start_x) / scaling_ratio_f / 2.0)) * 2.0; //2 * ceil(x/2) means round up to a closest even number + double horizontal_offset = (static_cast(orig_horizontal_offset) / ratio_prec) + static_cast(scaling_ratio_f * calc - static_cast(fragment_start_x)); + + const int32_t fragment_input_width = stripe->fragmentInputWidth; + const int32_t fragment_output_width = stripe->fragmentOutputWidth + addition; + + int32_t horizontal_offset_fxp = static_cast(floor(horizontal_offset * ratio_prec)); + + //1 + int32_t horizontal_offset_min = 0; + int32_t horizontal_offset_max = ((5 * scaling_ratio) - (1U << GraphResolutionConfigurator::SCALE_PREC)) / 2; + + //2 + horizontal_offset_min = std::max((58982 * fragment_input_width) - (fragment_output_width * scaling_ratio), horizontal_offset_min); + horizontal_offset_max = std::min((72089 * fragment_input_width) - (fragment_output_width * scaling_ratio), horizontal_offset_max); + + //3 + horizontal_offset_max = std::min(fragment_input_width * (1 << GraphResolutionConfigurator::SCALE_PREC) + scaling_ratio * (1 + 1 / 128) - fragment_output_width * scaling_ratio, horizontal_offset_max); + + return (horizontal_offset_fxp >= horizontal_offset_min && horizontal_offset_fxp <= horizontal_offset_max); +} + +void Ipu8FragmentsConfigurator::vanishStripe(uint8_t stripe, uint32_t runKerenlUuid, StaticGraphFragmentDesc* kernelFragments, VanishOption vanishOption) +{ + _node->fragmentVanishStatus[stripe] = vanishOption; + kernelFragments[stripe] = {}; + _outputStartX[runKerenlUuid][stripe] = 0; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsCropper(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // prev kernel is the downscaler + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + // No cropping in DS, cropping is done by ESPA cropper + + int32_t leftPixel = runKernel->resolution_info->input_crop.left; + int32_t rightPixel = static_cast(runKernel->resolution_info->input_width - runKernel->resolution_info->input_crop.right); + + int32_t leftNonVanishedStripe = 0; + int32_t rightNonVanishedStripe = _node->numberOfFragments - 1; + + std::vector xOffset(_node->numberOfFragments, 0); + + for (int8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (leftPixel + MIN_STRIPE_WIDTH_BEFORE_TNR >= kernelFragments[stripe].fragmentStartX + kernelFragments[stripe].fragmentInputWidth) + { + // This stripe is cropped out, vanish it! + // Note that we set output width to 0 for ESPA cropper and forward. But Stripe vanishes much eairlier in pipe, and these infos are not updated. + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterStats); + continue; + } + + // Not vanished + leftNonVanishedStripe = stripe; + break; + } + + for (uint8_t stripe = _node->numberOfFragments - 1; stripe >= 0; stripe--) + { + if (rightPixel <= kernelFragments[stripe].fragmentStartX + MIN_STRIPE_WIDTH_BEFORE_TNR) + { + // This stripe is cropped out, vanish it! + // Note that we set output width to 0 for ESPA cropper and forward. But Stripe vanishes much eairlier in pipe, and these infos are not updated. + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterStats); + continue; + } + + // Not vanished + rightNonVanishedStripe = stripe; + break; + } + + for (int32_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + int32_t leftCrop = runKernel->resolution_info->input_crop.left > kernelFragments[stripe].fragmentStartX ? + runKernel->resolution_info->input_crop.left - kernelFragments[stripe].fragmentStartX : 0; + int32_t rightCrop = runKernel->resolution_info->input_crop.right > (runKernel->resolution_info->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) ? + runKernel->resolution_info->input_crop.right - (runKernel->resolution_info->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) : 0; + + // Save for sys api + xOffset[stripe] = static_cast(leftCrop); + + // ESPA crop is after the down scaling and it must output resolution that divides by 8 for tnr scalers. + int32_t stripeZoomCrop = leftCrop + rightCrop; + + int outputWidth = (int)kernelFragments[stripe].fragmentOutputWidth - stripeZoomCrop; + if (outputWidth < 0) + { + return StaticGraphStatus::SG_ERROR; + } + + kernelFragments[stripe].fragmentOutputWidth = static_cast(outputWidth); + + // For start point, we need to remove the left cropping only for stripes 1 and on + uint16_t outputStartX = static_cast(kernelFragments[stripe].fragmentStartX > runKernel->resolution_info->input_crop.left) ? + static_cast(kernelFragments[stripe].fragmentStartX - runKernel->resolution_info->input_crop.left) : 0; + + _outputStartX[runKernel->kernel_uuid][stripe] = outputStartX; + + if (kernelFragments[stripe].fragmentOutputWidth % 8 != 0) + { + uint16_t pixelsToCrop = kernelFragments[stripe].fragmentOutputWidth % 8; + + // Additional crop on the right, affects only output width + kernelFragments[stripe].fragmentOutputWidth -= pixelsToCrop; + + if (stripe == rightNonVanishedStripe) + { + // Last stripe - crop from left + _outputStartX[runKernel->kernel_uuid][stripe] += pixelsToCrop; + xOffset[stripe] += pixelsToCrop; + } + } + } + + // Update system API offsets + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + systemApi->x_output_offset_per_stripe[stripe] = xOffset[stripe]; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsUpscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + if (runKernel->resolution_info->input_width == runKernel->resolution_info->output_width && + runKernel->resolution_info->input_height == runKernel->resolution_info->output_height && + runKernel->resolution_info->input_crop.left == 0 && + runKernel->resolution_info->input_crop.right == 0 && + runKernel->resolution_info->input_crop.top == 0 && + runKernel->resolution_info->input_crop.bottom == 0) + { + // Upscaler bypassed + return StaticGraphStatus::SG_OK; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + auto resInfo = runKernel->resolution_info; + + auto scaleFactorW = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right) / resInfo->output_width; + auto scaleFactorH = static_cast(resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom) / resInfo->output_height; + auto scaleFactor = std::max(scaleFactorW, scaleFactorH); + + int32_t croppedInputWidth = resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right; + int32_t outputWidth = resInfo->output_width; + + // We would like to keep upscalerWidthGranularity as large as possible in order to minimize the number of pixels that cannot be used for upscaling + // (upscalerWidthGranularity is divided to stripes, so the larger it is the more accurately we can divide) + // Find the largest granularity that divides both + uint32_t upscalerWidthGranularity = calculateGcd(static_cast(croppedInputWidth), static_cast(outputWidth)); + uint16_t inputUnits = static_cast(croppedInputWidth / upscalerWidthGranularity); + + int32_t leftPixel = runKernel->resolution_info->input_crop.left; + int32_t rightPixel = static_cast(runKernel->resolution_info->input_width - runKernel->resolution_info->input_crop.right); + + uint8_t leftNonVanishedStripe = 0; + uint8_t rightNonVanishedStripe = _node->numberOfFragments - 1; + + for (int8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (_node->fragmentVanishStatus[stripe] != VanishOption::Full) + { + continue; + } + + if (leftPixel + MIN_STRIPE_WIDTH_AFTER_TNR >= kernelFragments[stripe].fragmentStartX + kernelFragments[stripe].fragmentInputWidth) + { + // This stripe is cropped out, vanish it! + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterTnr); + continue; + } + + // Not vanished + leftNonVanishedStripe = stripe; + break; + } + + for (uint8_t stripe = _node->numberOfFragments - 1; stripe >= 0; stripe--) + { + if (_node->fragmentVanishStatus[stripe] != VanishOption::Full) + { + continue; + } + + if (rightPixel <= kernelFragments[stripe].fragmentStartX + MIN_STRIPE_WIDTH_AFTER_TNR) + { + // This stripe is cropped out, vanish it! + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterTnr); + continue; + } + // Not vanished + rightNonVanishedStripe = stripe; + break; + } + + for (uint8_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + int32_t leftCrop = resInfo->input_crop.left > kernelFragments[stripe].fragmentStartX ? + resInfo->input_crop.left - kernelFragments[stripe].fragmentStartX : 0; + int32_t rightCrop = resInfo->input_crop.right > (resInfo->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) ? + resInfo->input_crop.right - (resInfo->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) : 0; + + int32_t stripeZoomCrop = leftCrop + rightCrop; + + // Calculate the step, proportional to the part of input to upscaler that this stripe is working on + uint16_t inputWidthAfterZoomCrop = static_cast(kernelFragments[stripe].fragmentInputWidth - stripeZoomCrop); + + uint16_t pixelsToCrop = 0; + uint16_t maxInputWidth = static_cast(UPSCALER_MAX_OUTPUT_WIDTH * scaleFactor); + if (inputWidthAfterZoomCrop > maxInputWidth) + { + pixelsToCrop = inputWidthAfterZoomCrop - maxInputWidth; + inputWidthAfterZoomCrop = maxInputWidth; + } + + uint16_t stripeStepW = GRA_ROUND_DOWN(static_cast(static_cast(inputWidthAfterZoomCrop) / (resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right) * upscalerWidthGranularity), 2); + uint16_t inputWidthAfterTotalCrop = stripeStepW * inputUnits; + + if (inputWidthAfterTotalCrop < 16) + { + // Too little left after cropping, vanish this stripe + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterTnr); + continue; + } + + pixelsToCrop += (inputWidthAfterZoomCrop - inputWidthAfterTotalCrop); + + kernelFragments[stripe].fragmentOutputWidth = static_cast(GRA_ROUND(static_cast(inputWidthAfterTotalCrop) / scaleFactor)); + + // Validate output width + if (static_cast(inputWidthAfterTotalCrop) / kernelFragments[stripe].fragmentOutputWidth != + static_cast(resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom) / resInfo->output_height) + { + // Output width is not valid, return error + return StaticGraphStatus::SG_ERROR; + } + + if (stripe == leftNonVanishedStripe && stripe != rightNonVanishedStripe) + { + // Crop on the right + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = 0; + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop; + } + else if (stripe == rightNonVanishedStripe && stripe != leftNonVanishedStripe) + { + // Crop on the left + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = pixelsToCrop; + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = 0; + } + else + { + // Crop both sides + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = GRA_ROUND_DOWN(static_cast(pixelsToCrop / 2), 2); + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop - kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + } + + uint16_t stripeStart = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? + kernelFragments[stripe].fragmentStartX - resInfo->input_crop.left : 0); + + stripeStart += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + auto scaleFactorFixed = static_cast(static_cast(scaleFactor * static_cast(1 << 16))) / static_cast(1 << 16); + + float widthIn = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + float horizontalOffset = (static_cast(widthIn) - static_cast(scaleFactorFixed) * (static_cast(resInfo->output_width) - 1.0F)) / 2.0F; + + auto nScaledPixelsMax = (static_cast(stripeStart) + 1.0f - horizontalOffset) / scaleFactorFixed; + auto nScaledPixels = std::ceil((static_cast(stripeStart) - horizontalOffset) / scaleFactorFixed); + + if (static_cast(nScaledPixels) % 2 != 0) + { + nScaledPixels = 2 * std::floor(nScaledPixelsMax / 2); + } + + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(nScaledPixels); + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsOutput(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments, bool isTnr) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + int16_t leftNonVanishedStripe = 0; + int16_t rightNonVanishedStripe = _node->numberOfFragments - 1; + + for (int16_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if ((_node->fragmentVanishStatus[stripe] == VanishOption::Full) || + (isTnr && _node->fragmentVanishStatus[stripe] == VanishOption::AfterTnr)) + { + // Not vanished + leftNonVanishedStripe = stripe; + break; + } + } + + for (int16_t stripe = _node->numberOfFragments - 1; stripe >= 0; stripe--) + { + if ((_node->fragmentVanishStatus[stripe] == VanishOption::Full) || + (isTnr && _node->fragmentVanishStatus[stripe] == VanishOption::AfterTnr)) + { + // Not vanished + rightNonVanishedStripe = stripe; + break; + } + } + + // Remove overlaps between stripes + FormatType bufferFormat = GraphResolutionConfiguratorHelper::getFormatForDrainer(runKernel->kernel_uuid); + std::vector newOutputStartX = std::vector(_node->numberOfFragments, 0); + + for (int16_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + if (stripe == leftNonVanishedStripe) // first stripe + { + newOutputStartX[stripe] = 0; + } + else //middle or last stripe + { + newOutputStartX[stripe] = + (_outputStartX[runKernel->kernel_uuid][stripe] + _outputStartX[runKernel->kernel_uuid][stripe-1] + kernelFragments[stripe-1].fragmentOutputWidth) / 4 * 2; + + // Align to format restrictions if TNR drainer & data is 10-bit packed + newOutputStartX[stripe] = alignToFormatRestrictions(newOutputStartX[stripe], bufferFormat); + } + } + + _outputStartX[runKernel->kernel_uuid] = newOutputStartX; + + // Data Width is calculated according to data starts + for (int16_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + if (stripe == rightNonVanishedStripe) // last stripe + { + kernelFragments[stripe].fragmentOutputWidth = static_cast(runKernel->resolution_info->output_width - _outputStartX[runKernel->kernel_uuid][stripe]); + } + else // first or middle stripe + { + if (_outputStartX[runKernel->kernel_uuid][stripe + 1] <= _outputStartX[runKernel->kernel_uuid][stripe]) + { + return StaticGraphStatus::SG_ERROR; + } + + kernelFragments[stripe].fragmentOutputWidth = static_cast(_outputStartX[runKernel->kernel_uuid][stripe+1] - _outputStartX[runKernel->kernel_uuid][stripe]); + } + } + + // Update system API offsets +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + for (int16_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + systemApi->x_output_offset_per_stripe[stripe] = 0; + + for (uint8_t plane = 0; plane < 3; plane++) + { + systemApi->plane_start_address_per_stripe[stripe * 3 + plane] = 0; + } + } + + for (int16_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + uint32_t sumOfPrevWidths = 0; + + for (int16_t s = leftNonVanishedStripe; s < stripe; s++) + { + sumOfPrevWidths += kernelFragments[s].fragmentOutputWidth; + } + + // OutputOffsetPerStripe: Sum(prev output widths) + input_crop.left - stripe.startX + systemApi->x_output_offset_per_stripe[stripe] = + sumOfPrevWidths + runKernel->resolution_info->input_crop.left - kernelFragments[stripe].fragmentStartX; + + // PlaneOffsetStartAddressPerStripe: Sum(prev output widths) * DataSize + for (uint8_t plane = 0; plane < 2; plane++) + { + systemApi->plane_start_address_per_stripe[stripe * 3 + plane] = getPlaneStartAddress(sumOfPrevWidths, bufferFormat, plane); + } + } + + return StaticGraphStatus::SG_OK; +} + +uint32_t Ipu8FragmentsConfigurator::getPlaneStartAddress(uint32_t sumOfPrevWidths, FormatType formatType, uint8_t plane) +{ + // Calculate according to format BPP. + uint32_t bitsPerElement = 8; + uint32_t elementsPerCacheLine = 64; + uint8_t numberOfPlanes = 3; + + if (formatType == FormatType::YUV420_8_SP_P) + { + // 8-bit packed (OFS output) + bitsPerElement = 8; + elementsPerCacheLine = 64; + numberOfPlanes = 2; + } + else if (formatType == FormatType::YUV420_10_SP_P) + { + // 10-bit packed (TNR ref) + bitsPerElement = 10; + elementsPerCacheLine = 50; + numberOfPlanes = 2; + } + else if (formatType == FormatType::META_8) + { + // 8-bit meta data (TNR recursice similarity) + bitsPerElement = 8; + elementsPerCacheLine = 64; + numberOfPlanes = 1; + } + else + { + // Format not supported + // Log error + return 0; + } + + if (plane >= numberOfPlanes) + { + // Plane does not exist + return 0; + } + + // Offset is calculated by taking whole cache lines and then adding the remaining pixles and translate to bytes. + uint32_t wholeCacheLines = sumOfPrevWidths / elementsPerCacheLine; + uint32_t remainingPixels = sumOfPrevWidths % elementsPerCacheLine; + + if ((remainingPixels * bitsPerElement) % 8 != 0) + { + // Log error + return 0; + } + + return wholeCacheLines * 64 + (remainingPixels * bitsPerElement) / 8; +} + +uint16_t Ipu8FragmentsConfigurator::alignToFormatRestrictions(uint16_t size, FormatType bufferFormat) +{ + if (bufferFormat != FormatType::YUV420_10_SP_P) + { + return size; + } + + uint16_t elementsPerCacheLine = 50; + + uint16_t remainingPixels = size % elementsPerCacheLine; + uint16_t pixelsToRemove = remainingPixels % 4; + + return size - pixelsToRemove; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsTnrScaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + auto resInfo = runKernel->resolution_info; + + auto scaleFactor = static_cast(resInfo->output_width) / (resInfo->input_width); + + for (int32_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (_node->fragmentVanishStatus[stripe] == VanishOption::AfterStats) + { + continue; + } + + kernelFragments[stripe].fragmentOutputWidth = static_cast(kernelFragments[stripe].fragmentInputWidth * scaleFactor); + + // Start of output is rounded up since this is what b2i_ds does (Creates pixels starting from the pixel after) + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(ceil(scaleFactor * kernelFragments[stripe].fragmentStartX / 2)) * 2; + } + + // Save stripes for feeder configuration + _tnrScalerFragments = kernelFragments; + _tnrScalerRunKernel = runKernel; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsTnrFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, GraphResolutionConfiguratorKernelRole kernelRole) +{ + if (kernelFragments == nullptr || _tnrScalerFragments == nullptr || _tnrScalerRunKernel == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (_node->fragmentVanishStatus[stripe] == VanishOption::AfterStats) + { + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterStats); + continue; + } + + if (kernelRole == GraphResolutionConfiguratorKernelRole::TnrFeederFull) + { + // TNR Full resolution + kernelFragments[stripe].fragmentInputWidth = static_cast(_tnrScalerRunKernel->resolution_info->input_width); + kernelFragments[stripe].fragmentOutputWidth = _tnrScalerFragments[stripe].fragmentInputWidth; + kernelFragments[stripe].fragmentStartX = _tnrScalerFragments[stripe].fragmentStartX; + _outputStartX[runKernel->kernel_uuid][stripe] = _tnrScalerFragments[stripe].fragmentStartX; + } + else // GraphResolutionConfiguratorKernelRole::TnrFeederSmall + { + // TNR Small resolution + kernelFragments[stripe].fragmentInputWidth = static_cast(_tnrScalerRunKernel->resolution_info->output_width); + kernelFragments[stripe].fragmentOutputWidth = _tnrScalerFragments[stripe].fragmentOutputWidth; + kernelFragments[stripe].fragmentStartX = _outputStartX[_tnrScalerRunKernel->kernel_uuid][stripe]; + _outputStartX[runKernel->kernel_uuid][stripe] = _outputStartX[_tnrScalerRunKernel->kernel_uuid][stripe]; + } + } + + // Update system API offsets + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + systemApi->x_output_offset_per_stripe[stripe] = _outputStartX[runKernel->kernel_uuid][stripe]; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsSmurf(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + StaticGraphFragmentDesc* prevKernelFragments, std::vector& smurfKernels) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + auto resInfo = runKernel->resolution_info; + if (resInfo->input_width == 0 || resInfo->input_height == 0 || + resInfo->output_width == 0 || resInfo->output_height == 0) + { + // Smurf not in use + return StaticGraphStatus::SG_OK; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + // Find the device that is fed by this smurf (the second in the pair) + StaticGraphRunKernel* deviceRunKernel = nullptr; + for (auto& smurfInfo : smurfKernels) + { + if (smurfInfo->_smurfRunKernel->kernel_uuid == runKernel->kernel_uuid) + { + deviceRunKernel = smurfInfo->_deviceRunKernel; + break; + } + } + + if (deviceRunKernel == nullptr) + { + // Smurf does not have a device? + return StaticGraphStatus::SG_ERROR; + } + + // Find the index of the device in the node kernels + StaticGraphFragmentDesc* deviceFragments = nullptr; + for (uint32_t j = 0; j < _node->nodeKernels.kernelCount; j++) + { + if (_node->nodeKernels.kernelList[j].run_kernel.kernel_uuid == deviceRunKernel->kernel_uuid) + { + + deviceFragments = _node->nodeKernels.kernelList[j].fragment_descs; + break; + } + } + + if (deviceFragments == nullptr) + { + // Smurf does not have a device? + return StaticGraphStatus::SG_ERROR; + } + + double newScaleFactorH = (double)(resInfo->output_width + resInfo->output_crop.left + resInfo->output_crop.right) / (resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + double newScaleFactorV = (double)(resInfo->output_height + resInfo->output_crop.top + resInfo->output_crop.bottom) / (resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom); + double newScaleFactor = std::max(newScaleFactorH, newScaleFactorV); + + for (int8_t stripe = 0; stripe < _node->GetNumberOfFragments(); stripe++) + { + // If device is vanished, vanish the smurf too + if (deviceFragments[stripe].fragmentOutputWidth == 0 && + deviceFragments[stripe].fragmentInputWidth == 0) + { + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, _node->fragmentVanishStatus[stripe]); + continue; + } + + // Smurf output is the same as the device input + kernelFragments[stripe].fragmentOutputWidth = deviceFragments[stripe].fragmentInputWidth; + + // Get the start X that will we actually have (since feeder can only crop even numbers) prevKernelFragments is the feeder + uint32_t requiredOutputStartX = deviceFragments[stripe].fragmentStartX + resInfo->output_crop.left; + uint32_t actualOutputStartX = static_cast(ceil(newScaleFactor * prevKernelFragments[stripe].fragmentStartX / 2)) * 2; + + if (actualOutputStartX > (uint32_t)resInfo->output_crop.left && (requiredOutputStartX > actualOutputStartX)) + { + // This is actually output crop (PAL knows :) + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = static_cast(requiredOutputStartX - actualOutputStartX); + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsSmurfFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments) +{ + if (runKernel == nullptr || kernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + _outputStartX[runKernel->kernel_uuid][stripe] = kernelFragments[stripe].fragmentStartX; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::copyFragments(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* prevKernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* kernelFragments) +{ + if (prevKernelFragments == nullptr || kernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + if (_outputStartX.find(prevKernelUuid) == _outputStartX.end()) + { + // This is the main DS, we start from it, no need to copy + return StaticGraphStatus::SG_OK; + } + + for (uint32_t i = 0; i < _node->numberOfFragments; i++) + { + kernelFragments[i].fragmentInputWidth = prevKernelFragments[i].fragmentOutputWidth; + kernelFragments[i].fragmentOutputWidth = prevKernelFragments[i].fragmentOutputWidth; + kernelFragments[i].fragmentStartX = _outputStartX[prevKernelUuid][i]; + kernelFragments[i].upscalerFragDesc.fragmentInputCropLeft = 0; + kernelFragments[i].upscalerFragDesc.fragmentInputCropRight = 0; + + _outputStartX[runKernel->kernel_uuid][i] = kernelFragments[i].fragmentStartX; + } + + return StaticGraphStatus::SG_OK; +} + +// Find the greatest common divisor, curtesy of CoPilot +uint32_t Ipu8FragmentsConfigurator::calculateGcd(uint32_t a, uint32_t b) +{ + while (b != 0) + { + uint32_t t = b; + b = a % b; + a = t; + } + return a; +} \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/FragmentsConfigurator.h b/modules/ipu_desc/ipu8/FragmentsConfigurator.h new file mode 100644 index 0000000..f3b81b9 --- /dev/null +++ b/modules/ipu_desc/ipu8/FragmentsConfigurator.h @@ -0,0 +1,69 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include "GraphResolutionConfiguratorInclude.h" +#include + +class Ipu8FragmentsConfigurator +{ +public: + static const int32_t MIN_STRIPE_WIDTH_BEFORE_TNR = 128; + static const int32_t MIN_STRIPE_WIDTH_AFTER_TNR = 64; + static const int32_t UPSCALER_MAX_OUTPUT_WIDTH = 4672; + Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node); + + StaticGraphStatus configureFragments(std::vector& smurfKernels); + +private: + // Stripe Actions - each filter will perform one action according to its role + StaticGraphStatus configFragmentsDownscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsCropper(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsUpscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsOutput(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments, bool isTnr); + StaticGraphStatus configFragmentsTnrScaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsTnrFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, GraphResolutionConfiguratorKernelRole kernelRole); + StaticGraphStatus configFragmentsSmurf(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, StaticGraphFragmentDesc* prevKernelFragments, + std::vector& smurfKernels); + StaticGraphStatus configFragmentsSmurfFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments); + + StaticGraphStatus copyFragments(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* prevKernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* kernelFragments); + void vanishStripe(uint8_t stripe, uint32_t runKerenlUuid, StaticGraphFragmentDesc* kernelFragments, VanishOption vanishOption); + uint32_t getPlaneStartAddress(uint32_t sumOfPrevWidths, FormatType formatType, uint8_t plane); + uint16_t alignToFormatRestrictions(uint16_t size, FormatType bufferFormat); + bool validateDownscalerOutputWidth(StaticGraphFragmentDesc* stripe, uint16_t addition, int32_t stripeIndex, double scaleFactor, StaticGraphRunKernel* runKernel); + uint32_t calculateGcd(uint32_t a, uint32_t b); + + OuterNode* _node = nullptr; + IStaticGraphConfig* _staticGraph = nullptr; + + // Fragments binaries do not contain output start x, so we keep them here + std::map> _outputStartX; + + // Save TNR resolutions for feeder configurations + StaticGraphFragmentDesc* _tnrScalerFragments = nullptr; + StaticGraphRunKernel* _tnrScalerRunKernel = nullptr; +}; diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfigurator.cpp b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.cpp new file mode 100644 index 0000000..b8f5f89 --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.cpp @@ -0,0 +1,2018 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "GraphResolutionConfiguratorInclude.h" +#include "GraphResolutionConfigurator.h" +#include +#include + +#if SUPPORT_FRAGMENTS == 1 +#include "FragmentsConfigurator.h" +#endif + +#define GRA_CONVERT_TO_RADIANS(degreeAngle) ((double)((degreeAngle)*M_PI/180.0)) +/* + * External Interfaces + */ + + GraphResolutionConfigurator::GraphResolutionConfigurator(IStaticGraphConfig* staticGraph) +{ + _staticGraph = staticGraph; + + if (_staticGraph == nullptr) + { + return; + } + + if (initRunKernelCoord(GraphResolutionConfiguratorKernelRole::DownScaler, _downscalerRunKernelCoord) != StaticGraphStatus::SG_OK || + initRunKernelCoord(GraphResolutionConfiguratorKernelRole::UpScaler, _upscalerRunKernelCoord) != StaticGraphStatus::SG_OK || + initRunKernelCoord(GraphResolutionConfiguratorKernelRole::EspaCropper, _cropperRunKernelCoord) != StaticGraphStatus::SG_OK || + initOutputRunKernelCoord(_outputRunKernelCoord) != StaticGraphStatus::SG_OK || + initKernelCoordsForUpdate() != StaticGraphStatus::SG_OK) + { + _staticGraph = nullptr; + return; + } + + auto outputRunKernel = getRunKernel(_outputRunKernelCoord); + auto cropperRunKernel = getRunKernel(_cropperRunKernelCoord); + + _originalCropOfFinalCropper = cropperRunKernel->resolution_info->input_crop; + + // Calculate total scaling between sensor and output + // We want to calculate the scaling ratio without taking any cropping into consideration + _widthIn2OutScale = static_cast(outputRunKernel->resolution_history->input_width - + outputRunKernel->resolution_history->input_crop.left - + outputRunKernel->resolution_history->input_crop.right) / outputRunKernel->resolution_history->output_width; + + _heightIn2OutScale = static_cast(outputRunKernel->resolution_history->input_height - + outputRunKernel->resolution_history->input_crop.top - + outputRunKernel->resolution_history->input_crop.bottom) / outputRunKernel->resolution_history->output_height; + + _originalCropInputToScaler = cropperRunKernel->resolution_history->input_crop; + + _originalCropScalerToOutput.left = outputRunKernel->resolution_history->input_crop.left - _originalCropInputToScaler.left; + _originalCropScalerToOutput.right = outputRunKernel->resolution_history->input_crop.right - _originalCropInputToScaler.right; + _originalCropScalerToOutput.top = outputRunKernel->resolution_history->input_crop.top - _originalCropInputToScaler.top; + _originalCropScalerToOutput.bottom = outputRunKernel->resolution_history->input_crop.bottom - _originalCropInputToScaler.bottom; + + // Now take into account the scaling performed by this output + // (Output kernel may perform scaling and cropping when graph contains post processing) + if (outputRunKernel->resolution_info != nullptr) + { + // First add the crop, translated to sensor units, w/out this kernel's scaling since input crop is done before scaling. + _originalCropScalerToOutput.left += static_cast(outputRunKernel->resolution_info->input_crop.left * _widthIn2OutScale); + _originalCropScalerToOutput.right += static_cast(outputRunKernel->resolution_info->input_crop.right * _widthIn2OutScale); + _originalCropScalerToOutput.top += static_cast(outputRunKernel->resolution_info->input_crop.top * _heightIn2OutScale); + _originalCropScalerToOutput.bottom += static_cast(outputRunKernel->resolution_info->input_crop.bottom * _heightIn2OutScale); + + _widthIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_width - + outputRunKernel->resolution_info->input_crop.left - + outputRunKernel->resolution_info->input_crop.right) / outputRunKernel->resolution_info->output_width; + + _heightIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_height - + outputRunKernel->resolution_info->input_crop.top - + outputRunKernel->resolution_info->input_crop.bottom) / outputRunKernel->resolution_info->output_height; + } + + // Remove sensor binning from In2Out total ratios and saved cropping values + SensorMode* sensorMode = nullptr; + _staticGraph->getSensorMode(&sensorMode); + if (sensorMode == nullptr) + { + _staticGraph = nullptr; + return; + } + + if (sensorMode->horizontalScalingDenominator) { + _sensorHorizontalScaling = static_cast(sensorMode->horizontalScalingNumerator) / sensorMode->horizontalScalingDenominator; + } + if (sensorMode->verticalScalingDenominator) { + _sensorVerticalScaling = static_cast(sensorMode->verticalScalingNumerator) / sensorMode->verticalScalingDenominator; + } + + _widthIn2OutScale = _widthIn2OutScale * _sensorHorizontalScaling; + _heightIn2OutScale = _heightIn2OutScale * _sensorVerticalScaling; + + _sensorHorizontalCropLeft = sensorMode->horizontalCropOffset; + _sensorHorizontalCropRight = outputRunKernel->resolution_history->input_width - + sensorMode->horizontalCropOffset - sensorMode->croppedImageWidth; + _sensorVerticalCropTop = sensorMode->verticalCropOffset; + _sensorVerticalCropBottom = outputRunKernel->resolution_history->input_height - + sensorMode->verticalCropOffset - sensorMode->croppedImageHeight; + + // Input crop to scaler includes sensor, so we need to remove it + _originalCropInputToScaler.left = static_cast((_originalCropInputToScaler.left - static_cast(_sensorHorizontalCropLeft)) * _sensorHorizontalScaling); + _originalCropInputToScaler.right = static_cast((_originalCropInputToScaler.right - static_cast(_sensorHorizontalCropRight)) * _sensorHorizontalScaling); + _originalCropInputToScaler.top = static_cast((_originalCropInputToScaler.top - static_cast(_sensorVerticalCropTop)) * _sensorVerticalScaling); + _originalCropInputToScaler.bottom = static_cast((_originalCropInputToScaler.bottom - static_cast(_sensorVerticalCropBottom)) * _sensorVerticalScaling); + + _originalCropScalerToOutput.left = static_cast(_originalCropScalerToOutput.left * _sensorHorizontalScaling); + _originalCropScalerToOutput.right = static_cast(_originalCropScalerToOutput.right * _sensorHorizontalScaling); + _originalCropScalerToOutput.top = static_cast(_originalCropScalerToOutput.top * _sensorVerticalScaling); + _originalCropScalerToOutput.bottom = static_cast(_originalCropScalerToOutput.bottom * _sensorVerticalScaling); + + _originalCropScalerToOutput.left -= cropperRunKernel->resolution_info->input_crop.left; + _originalCropScalerToOutput.right -= cropperRunKernel->resolution_info->input_crop.right; + _originalCropScalerToOutput.top -= cropperRunKernel->resolution_info->input_crop.top; + _originalCropScalerToOutput.bottom -= cropperRunKernel->resolution_info->input_crop.bottom; + } + +/* + * External Interfaces + */ + +#if SUPPORT_KEY_RESOLUTIONS == 1 + +StaticGraphStatus GraphResolutionConfigurator::getZoomKeyResolutionIndex(ZoomKeyResolutions* zoomKeyResolutions, SensorRoi sensorRoi, uint32_t& selectedIndex) +{ + uint32_t width = sensorRoi.width; + uint32_t height = sensorRoi.height; + + // SelectedIndex 0 means use full sensor + // SelectedIndex n+1 means use key resolution #n + selectedIndex = zoomKeyResolutions->numberOfZoomKeyOptions; + if (width > 0 && height > 0) + { + for (uint32_t i = 0; i < zoomKeyResolutions->numberOfZoomKeyOptions; ++i) + { + if (width > zoomKeyResolutions->zoomKeyResolutionOptions[i].width || height > zoomKeyResolutions->zoomKeyResolutionOptions[i].height) + { + // This key resolution is too small, so use previous one (selected index i means use previous key resolution, not this one) + selectedIndex = i; + break; + } + } + } + + return StaticGraphStatus::SG_OK; +} + +// This function receives a static graph and updates kernels resolution info and resolution history to +// perform the required crop and scaling for the give roi +// Expected changes in graph: +// Down scaler resolution info - crop & scale +// Up scaler resolution info - crop & scale +// +// Up scaler resolution history +// All kerenls after upscaler - resolution history +// +// When using key resolutions: +// If previous ROI is supplied, the function will also return indication if key resolution has changed. +// A change of key resolution indicates that resolutions of entire pipe had changed until after the up scaler +StaticGraphStatus GraphResolutionConfigurator::updateStaticGraphConfig(const RegionOfInterest& roi, const RegionOfInterest& prevRoi, + bool isCenteredZoom, bool prevIsCenteredZoom, bool& isKeyResolutionChanged) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // + // Step #1 Update according to this ROI's key resolution + // + // Get ROI in sensor dimensions + + // If zoom is centered, calculate the pan & tilt + RegionOfInterest userRoi = roi; + RegionOfInterest prevUserRoi = prevRoi; + + if (isCenteredZoom == true) + { + userRoi.panFactor = (1 - userRoi.zoomFactor) / 2; + userRoi.tiltFactor = (1 - userRoi.zoomFactor) / 2; + } + + if (prevIsCenteredZoom == true) + { + prevUserRoi.panFactor = (1 - prevUserRoi.zoomFactor) / 2; + prevUserRoi.tiltFactor = (1 - prevUserRoi.zoomFactor) / 2; + } + + SensorRoi sensorRoi; + if (getSensorRoi(userRoi, sensorRoi) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + if (roi.fromInput == false) + { + // Key resolution index + uint32_t keyResIndex = 0; + if (isCenteredZoom == true) + { + ZoomKeyResolutions* zoomKeyResolutions = nullptr; + if (_staticGraph->getZoomKeyResolutions(&zoomKeyResolutions) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // Get key resolution for this ROI + // Special case for factor 1, this means there is no zoom, so we select index 0 + if (userRoi.zoomFactor == 1.0) + { + keyResIndex = 0; + } + else if (getZoomKeyResolutionIndex(zoomKeyResolutions, sensorRoi, keyResIndex) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // Update the static configuration according to the key resolution index + // Copy the original kernels configuration a _kernels + if (_staticGraph->updateConfiguration(keyResIndex) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + } + else + { + if (_staticGraph->updateConfiguration() != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + } + + // Get key resolution for previous ROI + uint32_t prevKeyResIndex = 0; + + if (prevIsCenteredZoom == true) + { + ZoomKeyResolutions* zoomKeyResolutions = nullptr; + if (_staticGraph->getZoomKeyResolutions(&zoomKeyResolutions) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + SensorRoi prevSensorRoi; + if (getSensorRoi(prevUserRoi, prevSensorRoi) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // Special case for factor 1, this means there is no zoom, so we select index 0 + if (prevUserRoi.zoomFactor == 1.0) + { + prevKeyResIndex = 0; + } + else if (getZoomKeyResolutionIndex(zoomKeyResolutions, prevSensorRoi, prevKeyResIndex) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + } + // Update whether if key resolution has changed + isKeyResolutionChanged = (keyResIndex == prevKeyResIndex) ? false : true; + } + + // + // Step #2 Dynamic update according to this ROI + // + return updateRunKernelOfScalers(roi.fromInput,sensorRoi); +} + +#endif +// This function translates ROI from factors (as given by user) to sensor resolution (as required by resolution Configurator) +// There are 2 modes of work - +// if userRoi.fromInput is true it means zoomFactor panFactor and tiltFactor are relative to sensor FOV +// if userRoi.fromInput is false it means zoomFactor panFactor and tiltFactor are relative to preview pin output FOV +StaticGraphStatus GraphResolutionConfigurator::getSensorRoi(const RegionOfInterest& userRoi, SensorRoi& sensorRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + if (userRoi.fromInput == true) + { + if (userRoi.zoomFactor == 1 && userRoi.panFactor == 0) + { + auto cropRunKernel = getRunKernel(_cropperRunKernelCoord); + sensorRoi.width = cropRunKernel->resolution_info->output_width; + sensorRoi.height = cropRunKernel->resolution_info->output_height; + sensorRoi.cropLeft = cropRunKernel->resolution_info->input_crop.left; + sensorRoi.cropRight = cropRunKernel->resolution_info->input_crop.right; + sensorRoi.cropTop = GRA_ROUND_DOWN(std::min(cropRunKernel->resolution_history->input_height- cropRunKernel->resolution_info->output_height, std::max(0, static_cast(static_cast(cropRunKernel->resolution_history->input_height * userRoi.tiltFactor)))), 2); + sensorRoi.cropBottom = cropRunKernel->resolution_info->input_height - cropRunKernel->resolution_info->output_height - sensorRoi.cropTop; + // Not supported + return StaticGraphStatus::SG_OK; + } + else + { + return StaticGraphStatus::SG_ERROR; + } + } + auto outputRunKernel = getRunKernel(_outputRunKernelCoord); + // Calculate ROI on output, using original output since user ROI is relative to full output ROI (not after some zoom was performed) + StaticGraphKernelRes* outputRunKernelResolution = outputRunKernel->resolution_info; + if (outputRunKernelResolution == nullptr) + { + // Pipe output is not RCB (post processing kernel) + outputRunKernelResolution = outputRunKernel->resolution_history; + } + + uint32_t outputLeft = static_cast(outputRunKernelResolution->output_width * userRoi.panFactor); + uint32_t outputRight = static_cast(outputRunKernelResolution->output_width * (1 - userRoi.panFactor - userRoi.zoomFactor)); + uint32_t outputTop = static_cast(outputRunKernelResolution->output_height * userRoi.tiltFactor); + uint32_t outputBottom = static_cast(outputRunKernelResolution->output_height * (1 - userRoi.tiltFactor - userRoi.zoomFactor)); + + uint32_t outputWidth = outputRunKernelResolution->output_width - outputLeft - outputRight; + uint32_t outputHeight = outputRunKernelResolution->output_height - outputTop - outputBottom; + + // Total input to pipe (after sensor cropping and scaling) + int32_t inputWidth = static_cast((outputRunKernel->resolution_history->input_width - _sensorHorizontalCropLeft -_sensorHorizontalCropRight) * _sensorHorizontalScaling); + int32_t inputHeight = static_cast((outputRunKernel->resolution_history->input_height - _sensorVerticalCropTop - _sensorVerticalCropBottom) * _sensorVerticalScaling); + + // Translate to ROI on input + // We round down to make sure crops are not less than original crop + // We add to sensor ROI the cropping done after scalers since it will be cropped in zoom configurations as well. + // Since these cropping were added, We need to make sure crop right and bottom are not negative + sensorRoi.width = GRA_ROUND_DOWN(static_cast(outputWidth * _widthIn2OutScale + _originalCropScalerToOutput.left + _originalCropScalerToOutput.right), 2); + sensorRoi.height = GRA_ROUND_DOWN(static_cast(outputHeight * _heightIn2OutScale + _originalCropScalerToOutput.top + _originalCropScalerToOutput.bottom), 2); + sensorRoi.cropLeft = GRA_ROUND_UP(static_cast((outputLeft * _widthIn2OutScale) + _originalCropInputToScaler.left), 2); + sensorRoi.cropRight = (inputWidth - static_cast(sensorRoi.width) - static_cast(sensorRoi.cropLeft)) > 0 ? static_cast(inputWidth - sensorRoi.width - sensorRoi.cropLeft) : 0; + sensorRoi.cropTop = GRA_ROUND_UP(static_cast((outputTop * _heightIn2OutScale) + _originalCropInputToScaler.top), 2); + sensorRoi.cropBottom = (inputHeight - static_cast(sensorRoi.height) - static_cast(sensorRoi.cropTop)) > 0 ? static_cast(inputHeight - sensorRoi.height - sensorRoi.cropTop) : 0; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelOfScalers(bool fromInput, SensorRoi& roi) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + auto downscalerRunKernel = getRunKernel(_downscalerRunKernelCoord); + auto upscalerRunKernel = getRunKernel(_upscalerRunKernelCoord); + auto cropperRunKernel = getRunKernel(_cropperRunKernelCoord); + + if (fromInput) + { + cropperRunKernel->resolution_info->input_crop.top = roi.cropTop; + cropperRunKernel->resolution_info->input_crop.bottom = roi.cropBottom; + + // Update resolution history for relevant kernels + for (auto& runKernelForUpdate : _kernelsForUpdate) + { + // We update all histories according to upscaler... ignoring any cropping from now on, even if we configured ESPA cropper. + StaticGraphRunKernel* runKernelPtr = getRunKernel(runKernelForUpdate); + if (updateRunKernelResolutionHistory(runKernelPtr, cropperRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + } + else + { + + uint32_t inputWidth = downscalerRunKernel->resolution_info->input_width; + uint32_t inputHeight = downscalerRunKernel->resolution_info->input_height; + + uint32_t outputWidth = cropperRunKernel->resolution_info->output_width; + uint32_t outputHeight = cropperRunKernel->resolution_info->output_height; + + StaticGraphKernelResCrop downscalerCropHistory; + downscalerCropHistory.left = static_cast((downscalerRunKernel->resolution_history->input_crop.left - static_cast(_sensorHorizontalCropLeft)) * _sensorHorizontalScaling); + downscalerCropHistory.right = static_cast((downscalerRunKernel->resolution_history->input_crop.right - static_cast(_sensorHorizontalCropRight)) * _sensorHorizontalScaling); + downscalerCropHistory.top = static_cast((downscalerRunKernel->resolution_history->input_crop.top - static_cast(_sensorVerticalCropTop)) * _sensorVerticalScaling); + downscalerCropHistory.bottom = static_cast((downscalerRunKernel->resolution_history->input_crop.bottom - static_cast(_sensorVerticalCropBottom)) * _sensorVerticalScaling); + if (roi.width == outputWidth || roi.height == outputHeight) + { + updateRunKernelPassThrough(downscalerRunKernel, inputWidth, inputHeight); + updateRunKernelPassThrough(upscalerRunKernel, inputWidth, inputHeight); + // Update ESPA crop if required + updateRunKernelFinalCropper(cropperRunKernel, inputWidth, inputHeight, outputWidth, outputHeight); + } + // If ROI is larger than scaler's output resolution - we downscale + else if (roi.width > outputWidth) + { + // Only down scaler is active + if (updateRunKernelDownScaler(downscalerRunKernel, roi, inputWidth, inputHeight, + outputWidth, outputHeight, &downscalerCropHistory) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + updateRunKernelPassThrough(upscalerRunKernel, outputWidth, outputHeight); + + // When downscaling, cropper is not a part of dynamic scaling, even if it was a part of static configuration. + updateRunKernelPassThrough(cropperRunKernel, outputWidth, outputHeight); + + } + else + { + // Configure downscaler and upscaler according to upscaler constraints + + // Update upscaler info, according constraints. Returns the expected input width and height for upscaler. + uint32_t upscalerActualInputWidth; + uint32_t upscalerActualInputHeight; + uint32_t upscalerActualOutputWidth; + uint32_t upscalerActualOutputHeight; + if (updateRunKernelUpScaler(upscalerRunKernel, roi.width, roi.height, outputWidth, outputHeight, + upscalerActualInputWidth, upscalerActualInputHeight, + upscalerActualOutputWidth, upscalerActualOutputHeight) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Update DS cropping and downscale according to the resolution the upscaler requires. + if (updateRunKernelDownScaler(downscalerRunKernel, roi, inputWidth, inputHeight, + upscalerActualInputWidth, upscalerActualInputHeight, &downscalerCropHistory) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Now that we're done, if downscaler is not doing any scaling, it is better to let it be bypassed and move the cropping to upscaler + updateCroppingScaler(downscalerRunKernel, upscalerRunKernel); + + // Update ESPA crop if required + updateRunKernelFinalCropper(cropperRunKernel, upscalerActualOutputWidth, upscalerActualOutputHeight, outputWidth, outputHeight); + } + + // Update resolution histories according to decisions made above + if (updateRunKernelResolutionHistory(upscalerRunKernel, downscalerRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + if (updateRunKernelResolutionHistory(cropperRunKernel, upscalerRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Update resolution history for relevant kernels + for (auto& runKernelForUpdate : _kernelsForUpdate) + { + // We update all histories according to upscaler... ignoring any cropping from now on, even if we configured ESPA cropper. + // Anna - I don't know why cropping was ignored. I think it should be after cropping + StaticGraphRunKernel* runKernelPtr = getRunKernel(runKernelForUpdate); + if (updateRunKernelResolutionHistory(runKernelPtr, cropperRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + } + + return ret; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, SensorRoi& roi, + uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, + StaticGraphKernelResCrop* originalScalerCrop) +{ + // + // Configure scaler + // + runKernel->resolution_info->input_width = inputWidth; + runKernel->resolution_info->input_height = inputHeight; + + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // Take into consideration original crop from downscaler's resolution history + // We assume that originally DS was configured to crop all the padding in its resolution history. + // Otherwise - we will need to save original DS crop (but for each key resolution...) + // roi crops were rounded, while original crop may still be odd numbers. We need to ignore 1 pixel diffs + StaticGraphKernelResCrop* runKernelCrop = &runKernel->resolution_info->input_crop; + runKernelCrop->left = static_cast(roi.cropLeft) - originalScalerCrop->left; + runKernelCrop->right = static_cast(roi.cropRight) - originalScalerCrop->right; + runKernelCrop->top = static_cast(roi.cropTop) - originalScalerCrop->top; + runKernelCrop->bottom = static_cast(roi.cropBottom) - originalScalerCrop->bottom; + + // If we are very close to key resolution sizes, and sensor BYR order is not GRBG, we may have small negative crops here + if (runKernelCrop->left < 0) + { + runKernelCrop->left = 0; + } + if (runKernelCrop->right < 0) + { + runKernelCrop->right = 0; + } + if (runKernelCrop->top < 0) + { + runKernelCrop->top = 0; + } + if (runKernelCrop->bottom < 0) + { + runKernelCrop->bottom = 0; + } + + if (runKernelCrop->left & 1) + { + runKernelCrop->left = runKernelCrop->left - 1; + } + if (runKernelCrop->right & 1) + { + runKernelCrop->right = runKernelCrop->right - 1; + } + if (runKernelCrop->top & 1) + { + runKernelCrop->top = runKernelCrop->top - 1; + } + if (runKernelCrop->bottom & 1) + { + runKernelCrop->bottom = runKernelCrop->bottom - 1; + } + + // In case ROI is too small for desired output resolution, we increase ROI + if (adjustDownscalerCrop(runKernel->resolution_info) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::adjustDownscalerCrop(StaticGraphKernelRes* scalerResInfo) +{ + if (scalerResInfo->input_width - scalerResInfo->input_crop.left - scalerResInfo->input_crop.right < + scalerResInfo->output_width) + { + int32_t extraPixels = scalerResInfo->output_width - + (scalerResInfo->input_width - scalerResInfo->input_crop.left - scalerResInfo->input_crop.right); + + extraPixels = GRA_ROUND_UP(extraPixels, 4); + int32_t neededCrop = extraPixels / 2; + + if (scalerResInfo->input_crop.left + scalerResInfo->input_crop.right <= extraPixels) + { + // Cannot reach this resolution + return StaticGraphStatus::SG_ERROR; + } + + if (scalerResInfo->input_crop.left >= neededCrop && scalerResInfo->input_crop.right >= neededCrop) + { + // Both sides have enough for fix + scalerResInfo->input_crop.left -= neededCrop; + scalerResInfo->input_crop.right -= neededCrop; + } + else if (scalerResInfo->input_crop.left >= neededCrop) + { + // Only left has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.right); + scalerResInfo->input_crop.left -= neededCrop; + scalerResInfo->input_crop.right = 0; + } + else + { + // Only right has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.left); + scalerResInfo->input_crop.right -= neededCrop; + scalerResInfo->input_crop.left = 0; + } + } + + if (scalerResInfo->input_height - scalerResInfo->input_crop.top - scalerResInfo->input_crop.bottom < + scalerResInfo->output_height) + { + int32_t extraPixels = scalerResInfo->output_height - + (scalerResInfo->input_height - scalerResInfo->input_crop.top - scalerResInfo->input_crop.bottom); + + extraPixels = GRA_ROUND_UP(extraPixels, 4); + int32_t neededCrop = extraPixels / 2; + + if (scalerResInfo->input_crop.top + scalerResInfo->input_crop.bottom <= extraPixels) + { + // Cannot reach this resolution + return StaticGraphStatus::SG_ERROR; + } + + if (scalerResInfo->input_crop.top >= neededCrop && scalerResInfo->input_crop.bottom >= neededCrop) + { + // Both sides have enough for fix + scalerResInfo->input_crop.top -= neededCrop; + scalerResInfo->input_crop.bottom -= neededCrop; + } + else if (scalerResInfo->input_crop.top >= neededCrop) + { + // Only top has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.bottom); + scalerResInfo->input_crop.top -= neededCrop; + scalerResInfo->input_crop.bottom = 0; + } + else + { + // Only bottom has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.top); + scalerResInfo->input_crop.bottom -= neededCrop; + scalerResInfo->input_crop.top = 0; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, + uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, + uint32_t& upscalerActualInputWidth, uint32_t& upscalerActualInputHeight, + uint32_t& upscalerActualOutputWidth, uint32_t& upscalerActualOutputHeight) +{ + const uint32_t ia_pal_isp_upscaler_1_0__scaling_ratio__min = 4096; + + const uint32_t max_upscaling = (1 << SCALE_PREC) / ia_pal_isp_upscaler_1_0__scaling_ratio__min; + + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + upscalerActualOutputWidth = outputWidth; + upscalerActualOutputHeight = outputHeight; + + // Find valid output configurations + uint32_t stepW1 = 1; + uint32_t stepH1 = 1; + + for (stepH1 = 1; stepH1 < outputHeight / 2; stepH1++) + { + double horStep = static_cast(stepH1) * outputWidth / 2 / outputHeight; + if (floor((horStep)) == horStep) + { + stepW1 = static_cast(horStep) * 2; + break; + } + } + + // Try to work with "sensor" resolution - take original ESPA crop's values + // This is usually better when US output is not regular (and mp/dp cropping is used) and/or DS input is irregular (and ESPA is fixing A/R in original settings) + // HSD 15016169206 and 15017041003 are 2 examples + uint32_t newOutputWidth = outputWidth + _originalCropOfFinalCropper.left + _originalCropOfFinalCropper.right; + uint32_t newOutputHeight = outputHeight + _originalCropOfFinalCropper.top + _originalCropOfFinalCropper.bottom; + + uint32_t stepW2 = 1; + uint32_t stepH2 = 1; + + for (stepH2 = 1; stepH2 < newOutputHeight / 2; stepH2++) + { + double horStep = static_cast(stepH2) * newOutputWidth / 2 / newOutputHeight; + if (floor((horStep)) == horStep) + { + stepW2 = static_cast(horStep) * 2; + break; + } + } + + // Select which steps to take + uint32_t stepW = stepW1; + uint32_t stepH = stepH1; + + if (stepW2 > 1 && stepW2 < stepW1) + { + stepW = stepW2; + stepH = stepH2; + upscalerActualOutputWidth = newOutputWidth; + upscalerActualOutputHeight = newOutputHeight; + } + + // Now try to work with upscaler's direct output (remove espa cropping from output size) + newOutputWidth = runKernel->resolution_info->output_width; + newOutputHeight = runKernel->resolution_info->output_height; + + stepW2 = 1; + stepH2 = 1; + + for (stepH2 = 1; stepH2 < newOutputHeight / 2; stepH2++) + { + double horStep = static_cast(stepH2) * newOutputWidth / 2 / newOutputHeight; + if (floor((horStep)) == horStep) + { + stepW2 = static_cast(horStep) * 2; + break; + } + } + + // Select which steps to take + if (stepW2 > 1 && stepW2 < stepW) + { + stepW = stepW2; + stepH = stepH2; + upscalerActualOutputWidth = newOutputWidth; + upscalerActualOutputHeight = newOutputHeight; + } + + // The input to the upscaler should be multiple of (stepW, stepH) and also even numbers + stepW *= 2; + stepH *= 2; + + // Increase ROI to minimum possible ROI + upscalerActualInputWidth = (inputWidth > stepW && inputHeight > stepH) ? inputWidth : stepW; + + // Make sure ROI is a multiple of (stepW, stepH) + upscalerActualInputWidth = GRA_ROUND_DOWN(upscalerActualInputWidth, stepW); + upscalerActualInputHeight = (upscalerActualInputWidth / stepW) * stepH; + + if ((upscalerActualOutputWidth / upscalerActualInputWidth) > max_upscaling) + { + // Perform the max possible up scaling, downscaler will adjust itself + upscalerActualInputWidth = upscalerActualOutputWidth / max_upscaling; + upscalerActualInputWidth = GRA_ROUND_UP(upscalerActualInputWidth, stepW); + upscalerActualInputHeight = (upscalerActualInputWidth / stepW) * stepH; + } + + // + // Configure scaler + // + runKernel->resolution_info->input_width = upscalerActualInputWidth; + runKernel->resolution_info->input_height = upscalerActualInputHeight; + + runKernel->resolution_info->output_width = upscalerActualOutputWidth; + runKernel->resolution_info->output_height = upscalerActualOutputHeight; + + // Upscaler crop is always 0 + runKernel->resolution_info->input_crop.left = 0; + runKernel->resolution_info->input_crop.right = 0; + runKernel->resolution_info->input_crop.top = 0; + runKernel->resolution_info->input_crop.bottom = 0; + + return ret; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelPassThrough(StaticGraphRunKernel* runKernel, uint32_t width, uint32_t height) +{ + runKernel->resolution_info->input_width = width; + runKernel->resolution_info->output_width = width; + + runKernel->resolution_info->input_height = height; + runKernel->resolution_info->output_height = height; + + runKernel->resolution_info->input_crop.left = 0; + runKernel->resolution_info->input_crop.right = 0; + runKernel->resolution_info->input_crop.top = 0; + runKernel->resolution_info->input_crop.bottom = 0; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelFinalCropper(StaticGraphRunKernel* runKernel, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight) +{ + runKernel->resolution_info->input_width = inputWidth; + runKernel->resolution_info->input_height = inputHeight; + + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // Crop symmetrically + runKernel->resolution_info->input_crop.left = GRA_ROUND_DOWN(static_cast((inputWidth - outputWidth) / 2.0), 2); + runKernel->resolution_info->input_crop.right = inputWidth - outputWidth - runKernel->resolution_info->input_crop.left; + runKernel->resolution_info->input_crop.top = GRA_ROUND_DOWN(static_cast((inputHeight - outputHeight) / 2.0), 2); + runKernel->resolution_info->input_crop.bottom = inputHeight - outputHeight - runKernel->resolution_info->input_crop.top; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateCroppingScaler(StaticGraphRunKernel* downscalerRunKernel, StaticGraphRunKernel* upscalerRunKernel) + { + // Is DS performing DS? + int32_t widthAfterCtop = downscalerRunKernel->resolution_info->input_width - + downscalerRunKernel->resolution_info->input_crop.left - downscalerRunKernel->resolution_info->input_crop.right; + int32_t heightAfterCtop = downscalerRunKernel->resolution_info->input_height - + downscalerRunKernel->resolution_info->input_crop.top - downscalerRunKernel->resolution_info->input_crop.bottom; + + int32_t extraPixelsWidth = (downscalerRunKernel->resolution_info->input_width - downscalerRunKernel->resolution_info->input_crop.left - downscalerRunKernel->resolution_info->input_crop.right)- + downscalerRunKernel->resolution_info->output_width; + + widthAfterCtop -= extraPixelsWidth % 4; + + int32_t extraPixelsHeight = (downscalerRunKernel->resolution_info->input_width - downscalerRunKernel->resolution_info->input_crop.left - downscalerRunKernel->resolution_info->input_crop.right) - + downscalerRunKernel->resolution_info->output_width; + + heightAfterCtop -= extraPixelsHeight % 4; + + if (widthAfterCtop == downscalerRunKernel->resolution_info->output_width && + heightAfterCtop == downscalerRunKernel->resolution_info->output_height) + { + // Better move the cropping to US + upscalerRunKernel->resolution_info->input_crop.left = downscalerRunKernel->resolution_info->input_crop.left; + upscalerRunKernel->resolution_info->input_crop.right = downscalerRunKernel->resolution_info->input_crop.right; + upscalerRunKernel->resolution_info->input_crop.top = downscalerRunKernel->resolution_info->input_crop.top; + upscalerRunKernel->resolution_info->input_crop.bottom = downscalerRunKernel->resolution_info->input_crop.bottom; + + upscalerRunKernel->resolution_info->input_width = downscalerRunKernel->resolution_info->input_width; + upscalerRunKernel->resolution_info->input_height = downscalerRunKernel->resolution_info->input_height; + + downscalerRunKernel->resolution_info->input_crop.left = 0; + downscalerRunKernel->resolution_info->input_crop.right = 0; + downscalerRunKernel->resolution_info->input_crop.top = 0; + downscalerRunKernel->resolution_info->input_crop.bottom = 0; + + downscalerRunKernel->resolution_info->output_width = downscalerRunKernel->resolution_info->input_width; + downscalerRunKernel->resolution_info->output_height = downscalerRunKernel->resolution_info->input_height; + } + + return StaticGraphStatus::SG_OK; + } + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelResolutionHistory(StaticGraphRunKernel* runKernel, StaticGraphRunKernel* prevRunKernel, bool updateResolution) +{ + if (updateResolution == true) + { + runKernel->resolution_history->output_width = runKernel->resolution_info->input_width; + runKernel->resolution_history->output_height = runKernel->resolution_info->input_height; + } + + double horScaleFactor = _sensorHorizontalScaling; + double verScaleFactor = _sensorVerticalScaling; + + if (prevRunKernel->resolution_info != nullptr) + { + // Take our crop, translate according to our history. Take into account the scaling that prev kernel performed. + horScaleFactor = (double)prevRunKernel->resolution_history->output_width / + (prevRunKernel->resolution_history->input_width - prevRunKernel->resolution_history->input_crop.left - prevRunKernel->resolution_history->input_crop.right); + + verScaleFactor = (double)prevRunKernel->resolution_history->output_height / + (prevRunKernel->resolution_history->input_height - prevRunKernel->resolution_history->input_crop.top - prevRunKernel->resolution_history->input_crop.bottom); + + runKernel->resolution_history->input_crop.left = prevRunKernel->resolution_history->input_crop.left + + static_cast(prevRunKernel->resolution_info->input_crop.left / horScaleFactor); + runKernel->resolution_history->input_crop.right = prevRunKernel->resolution_history->input_crop.right + + static_cast(prevRunKernel->resolution_info->input_crop.right / horScaleFactor); + runKernel->resolution_history->input_crop.top = prevRunKernel->resolution_history->input_crop.top + + static_cast(prevRunKernel->resolution_info->input_crop.top / verScaleFactor); + runKernel->resolution_history->input_crop.bottom = prevRunKernel->resolution_history->input_crop.bottom + + static_cast(prevRunKernel->resolution_info->input_crop.bottom / verScaleFactor); + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphRunKernel* GraphResolutionConfigurator::getRunKernel(RunKernelCoords& coord) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + + if (status != StaticGraphStatus::SG_OK) { + return nullptr; + } + + auto node = graphTopology->links[coord.nodeInd]->destNode; + return &node->nodeKernels.kernelList[coord.kernelInd].run_kernel; +} + +StaticGraphStatus GraphResolutionConfigurator::findRunKernel(uint32_t kernelUuid, RunKernelCoords& coord) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + for (int32_t i = 0; i < graphTopology->numOfLinks; i++) + { + auto node = graphTopology->links[i]->destNode; + if (node != nullptr) + { + for (uint32_t j = 0; j < node->nodeKernels.kernelCount; j++) + { + if (node->nodeKernels.kernelList[j].run_kernel.kernel_uuid == kernelUuid) + { + //return &node->nodeKernels.kernelList[j].run_kernel; + coord.nodeInd = i; + coord.kernelInd = j; + return StaticGraphStatus::SG_OK; + } + } + } + } + + return StaticGraphStatus::SG_ERROR; +} + +StaticGraphStatus GraphResolutionConfigurator::initRunKernelCoord(GraphResolutionConfiguratorKernelRole role, RunKernelCoords &coord) +{ + uint32_t kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuid(role); + return findRunKernel(kernelUuid, coord); +} + +StaticGraphStatus GraphResolutionConfigurator::initOutputRunKernelCoord(RunKernelCoords& coord) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + GraphLink** links = graphTopology->links; + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + HwSink hwSink = HwSink::Disconnected; + + // Try to get output resolution according to priority - first preview then video or stills + std::vector virtualSinks; + virtualSinks.push_back(VirtualSink::PreviewSink); + virtualSinks.push_back(VirtualSink::VideoSink); + virtualSinks.push_back(VirtualSink::StillsSink); + + for (auto virtualSink : virtualSinks) + { + status = _staticGraph->getVirtualSinkConnection(virtualSink, &hwSink); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + if (hwSink != HwSink::Disconnected) + { + // found it + break; + } + } + + if (hwSink == HwSink::Disconnected) + { + return StaticGraphStatus::SG_ERROR; + } + + // Find output device + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + return findRunKernel(kernelUuid, coord); +} + +StaticGraphStatus GraphResolutionConfigurator::initKernelCoordsForUpdate() +{ + std::vector kernelUuids; + + GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(kernelUuids); + + for (auto& kernelUuid : kernelUuids) + { + RunKernelCoords coord; + if (findRunKernel(kernelUuid, coord) == StaticGraphStatus::SG_OK) + { + _kernelsForUpdate.push_back(coord); + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::getInputRoiForOutput(const ResolutionRoi& roi, HwSink hwSink, SensorRoi& sensorRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + RunKernelCoords coord; + if (findRunKernel(kernelUuid, coord) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + auto outputRunKernel = getRunKernel(coord); + + // We want to calculate the scaling ratio without taking any cropping into consideration + double widthIn2OutScale = static_cast(outputRunKernel->resolution_history->input_width - + outputRunKernel->resolution_history->input_crop.left - + outputRunKernel->resolution_history->input_crop.right) / outputRunKernel->resolution_history->output_width; + + double heightIn2OutScale = static_cast(outputRunKernel->resolution_history->input_height - + outputRunKernel->resolution_history->input_crop.top - + outputRunKernel->resolution_history->input_crop.bottom) / outputRunKernel->resolution_history->output_height; + + StaticGraphKernelResCrop outputCropHist = outputRunKernel->resolution_history->input_crop; + StaticGraphKernelResCrop outputCrop = { 0,0,0,0 }; + if (outputRunKernel->resolution_info != nullptr) + { + outputCrop = outputRunKernel->resolution_info->input_crop; + + // Translate crop to sensor units, w/out this kernel's scaling since input crop is done before scaling. + outputCrop.left += static_cast(outputCrop.left * widthIn2OutScale); + outputCrop.right += static_cast(outputCrop.right * widthIn2OutScale); + outputCrop.top += static_cast(outputCrop.top * heightIn2OutScale); + outputCrop.bottom += static_cast(outputCrop.bottom * heightIn2OutScale); + + widthIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_width - + outputRunKernel->resolution_info->input_crop.left - + outputRunKernel->resolution_info->input_crop.right) / outputRunKernel->resolution_info->output_width; + + heightIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_height - + outputRunKernel->resolution_info->input_crop.top - + outputRunKernel->resolution_info->input_crop.bottom) / outputRunKernel->resolution_info->output_height; + } + + // Now remove any scaling done by sensor itself + widthIn2OutScale *= _sensorHorizontalScaling; + heightIn2OutScale *= _sensorVerticalScaling; + + if ((outputCropHist.left < _sensorHorizontalCropLeft) || + (outputCropHist.right < _sensorHorizontalCropRight) || + (outputCropHist.top < _sensorVerticalCropTop) || + (outputCropHist.bottom < _sensorVerticalCropBottom)) { + return StaticGraphStatus::SG_ERROR; + } + + // Translate to ROI on input + sensorRoi.width = GRA_ROUND_UP(static_cast(roi.width * widthIn2OutScale), 2); + sensorRoi.height = GRA_ROUND_UP(static_cast(roi.height * heightIn2OutScale), 2); + sensorRoi.cropLeft = GRA_ROUND_UP(static_cast((roi.left * widthIn2OutScale) + ( (outputCropHist.left - _sensorHorizontalCropLeft) * _sensorHorizontalScaling ) + outputCrop.left), 2); + sensorRoi.cropRight = GRA_ROUND_UP(static_cast((roi.right * widthIn2OutScale) + ( (outputCropHist.right - _sensorHorizontalCropRight) * _sensorHorizontalScaling ) + outputCrop.right), 2); + sensorRoi.cropTop = GRA_ROUND_UP(static_cast((roi.top * heightIn2OutScale) + ( ( outputCropHist.top - _sensorVerticalCropTop) * _sensorVerticalScaling ) + outputCrop.top), 2); + sensorRoi.cropBottom = GRA_ROUND_UP(static_cast((roi.bottom * heightIn2OutScale) + ( ( outputCropHist.bottom - _sensorVerticalCropBottom ) * _sensorVerticalScaling ) + outputCrop.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi) +{ + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + RunKernelCoords coord; + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink::AeOutSink, graphId, links); + + if (findRunKernel(kernelUuid, coord) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + auto aeRunKernel = getRunKernel(coord); + if (aeRunKernel == nullptr) { + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelResCrop aeCropHist = aeRunKernel->resolution_history->input_crop; + + // Compute stat ROI relative to sensor roi + + double widthIn2OutScale = static_cast(aeRunKernel->resolution_history->output_width) / + (aeRunKernel->resolution_history->input_width - aeCropHist.left - aeCropHist.right); + + double heightIn2OutScale = static_cast(aeRunKernel->resolution_history->output_height) / + (aeRunKernel->resolution_history->input_height - aeCropHist.top - aeCropHist.bottom); + + statsRoi.width = GRA_ROUND_UP(static_cast(sensorRoi.width * widthIn2OutScale), 2); + statsRoi.height = GRA_ROUND_UP(static_cast(sensorRoi.height * heightIn2OutScale), 2); + statsRoi.left = GRA_ROUND_UP(static_cast((sensorRoi.cropLeft * widthIn2OutScale) + aeCropHist.left), 2); + statsRoi.right = GRA_ROUND_UP(static_cast((sensorRoi.cropRight * widthIn2OutScale) + aeCropHist.right), 2); + statsRoi.top = GRA_ROUND_UP(static_cast((sensorRoi.cropTop * heightIn2OutScale) + aeCropHist.top), 2); + statsRoi.bottom = GRA_ROUND_UP(static_cast((sensorRoi.cropBottom * heightIn2OutScale) + aeCropHist.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::undoSensorCropandScale(SensorRoi& sensor_roi) +{ + sensor_roi.width = GRA_ROUND_UP(static_cast(sensor_roi.width / _sensorHorizontalScaling), 2); + sensor_roi.height = GRA_ROUND_UP(static_cast(sensor_roi.height / _sensorVerticalScaling), 2); + sensor_roi.cropLeft = GRA_ROUND_UP(static_cast((sensor_roi.cropLeft / _sensorHorizontalScaling) + _sensorHorizontalCropLeft), 2); + sensor_roi.cropRight = GRA_ROUND_UP(static_cast((sensor_roi.cropRight / _sensorHorizontalScaling) + _sensorHorizontalCropRight), 2); + sensor_roi.cropTop = GRA_ROUND_UP(static_cast((sensor_roi.cropTop / _sensorVerticalScaling) + _sensorVerticalCropTop), 2); + sensor_roi.cropBottom = GRA_ROUND_UP(static_cast((sensor_roi.cropBottom / _sensorVerticalScaling) + _sensorVerticalCropBottom ), 2); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::undoSensorScaleRipAngle(int32_t& rip_angle) +{ + rip_angle = static_cast(round(atan((_sensorHorizontalScaling / _sensorVerticalScaling) * tan(GRA_CONVERT_TO_RADIANS(rip_angle))))); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::sensorCropOrScaleExist(bool& sensor_crop_or_scale_exist) +{ + sensor_crop_or_scale_exist = false; + if ((abs(_sensorHorizontalScaling - 1.0F) > 0.01F) || + (abs(_sensorVerticalScaling - 1.0F) > 0.01F) || + (_sensorHorizontalCropLeft > 0) || + (_sensorHorizontalCropRight > 0) || + (_sensorVerticalCropTop > 0) || + (_sensorVerticalCropBottom > 0)) + { + sensor_crop_or_scale_exist = true; + } + + return StaticGraphStatus::SG_OK; +} + +#if SUPPORT_KEY_RESOLUTIONS == 0 +// +// IPU 8 +// + +Ipu8GraphResolutionConfigurator::Ipu8GraphResolutionConfigurator(IStaticGraphConfig* staticGraph) : GraphResolutionConfigurator(staticGraph) +{ + _staticGraph = staticGraph; + if (_staticGraph == nullptr) + { + return; + } + + if (initRunKernel(GraphResolutionConfiguratorKernelRole::DownScaler, _downscalerRunKernel) != StaticGraphStatus::SG_OK || + initRunKernel(GraphResolutionConfiguratorKernelRole::UpScaler, _upscalerRunKernel) != StaticGraphStatus::SG_OK || + initRunKernel(GraphResolutionConfiguratorKernelRole::EspaCropper, _cropperRunKernel) != StaticGraphStatus::SG_OK || + initOutputRunKernel() != StaticGraphStatus::SG_OK || + initKernelsForUpdate() != StaticGraphStatus::SG_OK || + _node == nullptr) + { + _staticGraph = nullptr; + return; + } + + // Find crop steps for zoom using upscaler + uint32_t outputWidth = _upscalerRunKernel->resolution_info->output_width; + uint32_t outputHeight = _upscalerRunKernel->resolution_info->output_height; + + for (_upscalerStepH = 1; _upscalerStepH < outputHeight / 2; _upscalerStepH++) + { + double horStep = static_cast(_upscalerStepH) * outputWidth / 2 / outputHeight; + if (floor((horStep)) == horStep) + { + _upscalerStepW = static_cast(horStep) * 2; + break; + } + } + + _upscalerStepW *= 2; + _upscalerStepH *= 2; + + // Due to upscaler constraints, we should avoid having too many units. + // Number of pixels that cannot be used when upscaling a stripe may be up to ~ 2*units + // For details: https://hsdes.intel.com/appstore/article-one/#/article/15018342122 + // This affects the number of possible zoom steps, but for large resolutions it is OK to enlarge the step + while (outputWidth / _upscalerStepW > 70) + { + _upscalerStepW *= 2; + _upscalerStepH *= 2; + } + + // Save original values for kernels that are being updated + + _originalCropOfDownScaler = _downscalerRunKernel->resolution_info->input_crop; + _originalCropOfUpscaler = _upscalerRunKernel->resolution_info->input_crop; + _originaHistoryOfOutput = _outputRunKernel->resolution_history->input_crop; + + if (_outputRunKernel->resolution_info != nullptr) + { + _originalCropOfOutput = _outputRunKernel->resolution_info->input_crop; + } + + SensorMode* sensorMode = nullptr; + _staticGraph->getSensorMode(&sensorMode); + if (sensorMode == nullptr) + { + _staticGraph = nullptr; + return; + } + + if (sensorMode->horizontalScalingDenominator) + { + _sensorHorizontalScaling = static_cast(sensorMode->horizontalScalingNumerator) / sensorMode->horizontalScalingDenominator; + } + + if (sensorMode->verticalScalingDenominator) + { + _sensorVerticalScaling = static_cast(sensorMode->verticalScalingNumerator) / sensorMode->verticalScalingDenominator; + } + +#if SUPPORT_FRAGMENTS == 1 + + initIsFragments(); + + if (_node != nullptr && _node->GetNumberOfFragments() > 1) + { + _fragmentsConfigurator = new Ipu8FragmentsConfigurator(_staticGraph, _node); + } + +#endif +} + +Ipu8GraphResolutionConfigurator::~Ipu8GraphResolutionConfigurator() +{ + _kernelsForUpdateAfterCropper.clear(); + _kernelsForUpdateAfterUpscaler.clear(); + +#if SUPPORT_FRAGMENTS == 1 + if (_fragmentsConfigurator != nullptr) + { + delete _fragmentsConfigurator; + _fragmentsConfigurator = nullptr; + } + + for (auto& smurfInfo : _smurfKernels) + { + delete smurfInfo; + } + _smurfKernels.clear(); + +#endif +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initRunKernel(GraphResolutionConfiguratorKernelRole role, StaticGraphRunKernel*& runKernel) +{ + uint32_t kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuid(role); + return initRunKernel(kernelUuid, runKernel); +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initRunKernel(uint32_t kernelUuid, StaticGraphRunKernel*& runKernel) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + for (int32_t i = 0; i < graphTopology->numOfLinks; i++) + { + auto node = graphTopology->links[i]->destNode; + if (node != nullptr) + { + for (uint32_t j = 0; j < node->nodeKernels.kernelCount; j++) + { + if (node->nodeKernels.kernelList[j].run_kernel.kernel_uuid == kernelUuid) + { + runKernel = &node->nodeKernels.kernelList[j].run_kernel; + if (node->type == NodeTypes::Cb) + { + _node = node; + } + return StaticGraphStatus::SG_OK; + } + } + } + } + + return StaticGraphStatus::SG_ERROR; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initOutputRunKernel() +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + GraphLink** links = graphTopology->links; + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + HwSink hwSink = HwSink::Disconnected; + + // Try to get output resolution according to priority - first preview then video or stills + std::vector virtualSinks; + virtualSinks.push_back(VirtualSink::PreviewSink); + virtualSinks.push_back(VirtualSink::VideoSink); + virtualSinks.push_back(VirtualSink::StillsSink); + + for (auto virtualSink : virtualSinks) + { + status = _staticGraph->getVirtualSinkConnection(virtualSink, &hwSink); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + if (hwSink != HwSink::Disconnected) + { + // found it + break; + } + } + + if (hwSink == HwSink::Disconnected) + { + return StaticGraphStatus::SG_ERROR; + } + + // Find output device + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + return initRunKernel(kernelUuid, _outputRunKernel); +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initKernelsForUpdate() +{ + std::vector kernelUuids; + + GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(kernelUuids, _cropperRunKernel->kernel_uuid); + + for (auto& kernelUuid : kernelUuids) + { + StaticGraphRunKernel* runKernel; + if (initRunKernel(kernelUuid, runKernel) == StaticGraphStatus::SG_OK) + { + _kernelsForUpdateAfterCropper.push_back(runKernel); + } + } + + GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(kernelUuids, _upscalerRunKernel->kernel_uuid); + + for (auto& kernelUuid : kernelUuids) + { + StaticGraphRunKernel* runKernel; + if (initRunKernel(kernelUuid, runKernel) == StaticGraphStatus::SG_OK) + { + _kernelsForUpdateAfterUpscaler.push_back(runKernel); + } + } + + std::vector> smurfUuids; + GraphResolutionConfiguratorHelper::getSmurfRunKernelUuid(smurfUuids); + + for (auto& smurfUuid : smurfUuids) + { + StaticGraphRunKernel* runKernel; + StaticGraphRunKernel* deviceRunKernel; + if (initRunKernel(smurfUuid.first, runKernel) == StaticGraphStatus::SG_OK && + initRunKernel(smurfUuid.second, deviceRunKernel) == StaticGraphStatus::SG_OK) + { + SmurfKernelInfo* smurfInfo = new SmurfKernelInfo(); + smurfInfo->_smurfRunKernel = runKernel; + smurfInfo->_deviceRunKernel = deviceRunKernel; + smurfInfo->_originalDeviceCropHistory = deviceRunKernel->resolution_history->input_crop; + smurfInfo->_originalSmurfOutputCrop = runKernel->resolution_info->output_crop; + + _smurfKernels.push_back(smurfInfo); + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initIsFragments() +{ + _isFragments = false; + + if (_downscalerRunKernel == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (_downscalerRunKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiB2iDs1_1)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(_downscalerRunKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelDownscalerSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiB2iDs1_1* systemApi = reinterpret_cast + (static_cast(_downscalerRunKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + _isFragments = systemApi->is_striping; + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateStaticGraphConfig(const RegionOfInterest& roi, bool isCenteredZoom) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // Get ROI in sensor dimensions + + // If zoom is centered, calculate the pan & tilt + RegionOfInterest userRoi = roi; + + if (isCenteredZoom == true) + { + userRoi.panFactor = (1 - userRoi.zoomFactor) / 2; + userRoi.tiltFactor = (1 - userRoi.zoomFactor) / 2; + } + + ResolutionRoi downscalerInputRoi; + if (getDownscalerInputRoi(userRoi, downscalerInputRoi) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // + // Step #2 Dynamic update according to this ROI + // + return updateRunKernelOfScalers(downscalerInputRoi); +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::getDownscalerInputRoi(const RegionOfInterest& userRoi, ResolutionRoi& downscalerInputRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + if (userRoi.fromInput == true) + { + // Not supported + return StaticGraphStatus::SG_ERROR; + } + + // Use resolution history in case pipe output is not RCB (post processing kernel) + StaticGraphKernelRes* outputRunKernelResolution = _outputRunKernel->resolution_history; + if (_outputRunKernel->resolution_info != nullptr) + { + outputRunKernelResolution = _outputRunKernel->resolution_info; + } + + uint32_t outputLeft = static_cast(outputRunKernelResolution->output_width * userRoi.panFactor); + uint32_t outputRight = static_cast(outputRunKernelResolution->output_width * (1 - userRoi.panFactor - userRoi.zoomFactor)); + uint32_t outputTop = static_cast(outputRunKernelResolution->output_height * userRoi.tiltFactor); + uint32_t outputBottom = static_cast(outputRunKernelResolution->output_height * (1 - userRoi.tiltFactor - userRoi.zoomFactor)); + + // Translate the ROI to input, using res hist of output + ResolutionRoi pipeInputRoi; + + // _widthIn2OutScale and _heightIn2OutScale are relative to pipe input. History is relative to full sensor resolution + double widthHistScale = _widthIn2OutScale / _sensorHorizontalScaling; + double heightHistScale = _heightIn2OutScale / _sensorVerticalScaling; + + pipeInputRoi.left = static_cast(((outputLeft + _originalCropOfOutput.left) * widthHistScale) + _originaHistoryOfOutput.left); + pipeInputRoi.right = static_cast(((outputRight + _originalCropOfOutput.right) * widthHistScale) + _originaHistoryOfOutput.right); + pipeInputRoi.top = static_cast(((outputTop + _originalCropOfOutput.top) * heightHistScale) + _originaHistoryOfOutput.top); + pipeInputRoi.bottom = static_cast(((outputBottom + _originalCropOfOutput.bottom) * heightHistScale) + _originaHistoryOfOutput.bottom); + + // Translate ROI on input to ROI as input to downscaler + double scaleWidth = static_cast(_downscalerRunKernel->resolution_history->input_width + - _downscalerRunKernel->resolution_history->input_crop.left - _downscalerRunKernel->resolution_history->input_crop.right) / + _downscalerRunKernel->resolution_history->output_width; + + double scaleHeight = static_cast(_downscalerRunKernel->resolution_history->input_height + - _downscalerRunKernel->resolution_history->input_crop.top - _downscalerRunKernel->resolution_history->input_crop.bottom) / + _downscalerRunKernel->resolution_history->output_height; + + downscalerInputRoi.left = GRA_ROUND_UP(static_cast((pipeInputRoi.left - _downscalerRunKernel->resolution_history->input_crop.left) / scaleWidth), 2); + downscalerInputRoi.right = GRA_ROUND_UP(static_cast((pipeInputRoi.right - _downscalerRunKernel->resolution_history->input_crop.right) / scaleWidth), 2); + downscalerInputRoi.top = GRA_ROUND_UP(static_cast((pipeInputRoi.top - _downscalerRunKernel->resolution_history->input_crop.top) / scaleHeight), 2); + downscalerInputRoi.bottom = GRA_ROUND_UP(static_cast((pipeInputRoi.bottom - _downscalerRunKernel->resolution_history->input_crop.bottom) / scaleHeight), 2); + + downscalerInputRoi.width = _downscalerRunKernel->resolution_history->output_width - downscalerInputRoi.left - downscalerInputRoi.right; + downscalerInputRoi.height = _downscalerRunKernel->resolution_history->output_height - downscalerInputRoi.top - downscalerInputRoi.bottom; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelOfScalers(ResolutionRoi& roi) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + uint32_t inputWidth = _downscalerRunKernel->resolution_info->input_width; + uint32_t inputHeight = _downscalerRunKernel->resolution_info->input_height; + + uint32_t outputWidthCropper = _cropperRunKernel->resolution_info->output_width; + uint32_t outputHeightCropper = _cropperRunKernel->resolution_info->output_height; + + uint32_t outputWidth = _upscalerRunKernel->resolution_info->output_width; + uint32_t outputHeight = _upscalerRunKernel->resolution_info->output_height; + + StaticGraphKernelResCrop downscalerCropHist = _downscalerRunKernel->resolution_history->input_crop; + + // If ROI is larger than scaler's output resolution - we downscale + if (roi.width >= outputWidth) + { + // Only down scaler is active + uint32_t dsOutputWidth = outputWidth; + uint32_t dsOutputHeight = outputHeight; + + if (updateRunKernelDownScaler(_downscalerRunKernel, roi, dsOutputWidth, dsOutputHeight) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + if (updateRunKernelCropper(_cropperRunKernel, roi, _downscalerRunKernel->resolution_info, outputWidthCropper, outputHeightCropper) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + updateRunKernelPassThrough(_upscalerRunKernel, outputWidth, outputHeight); + } + else + { + updateRunKernelPassThrough(_downscalerRunKernel, inputWidth, inputHeight); + + // Configure ESPA crop to output resolution (TNR ROI) + if (updateRunKernelCropper(_cropperRunKernel, roi, _downscalerRunKernel->resolution_info, outputWidthCropper, outputHeightCropper) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Configure upscaler to crop from output resolution to ROI + if (updateRunKernelUpScaler(_upscalerRunKernel, roi, _cropperRunKernel->resolution_info->input_crop, + outputWidthCropper, outputHeightCropper, outputWidth, outputHeight) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + // Update resolution histories according to decisions made above + if (updateRunKernelResolutionHistory(_cropperRunKernel, _downscalerRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + if (updateRunKernelResolutionHistory(_upscalerRunKernel, _cropperRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Update resolution history for relevant kernels + for (auto& runKernelForUpdate : _kernelsForUpdateAfterCropper) + { + // We update all histories according to our changes... assuming no more cropping from now on + if (updateRunKernelResolutionHistory(runKernelForUpdate, _cropperRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + for (auto& runKernelForUpdate : _kernelsForUpdateAfterUpscaler) + { + // We update all histories according to our changes... assuming no more cropping from now on + if (updateRunKernelResolutionHistory(runKernelForUpdate, _upscalerRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + // After resolution history was updated, re-configure SAP devices to get the correct FOV + // We do not change the sap feeders configuration, only update the crop & scale of smurfs + for (auto& smurfInfo : _smurfKernels) + { + if (updateRunKernelSmurf(smurfInfo) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + if (ret == StaticGraphStatus::SG_OK) + { + ret = SanityCheck(); + } + + if (ret == StaticGraphStatus::SG_OK && _fragmentsConfigurator != nullptr) + { + // Configure fragments according to the new zoomed run kernels information + ret = _fragmentsConfigurator->configureFragments(_smurfKernels); + } + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, + uint32_t& outputWidth, uint32_t& outputHeight) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + if (_isFragments == false) + { + // No fragments, crop to ROI and downscale to output resolution + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + runKernel->resolution_info->input_crop.left = roi.left; + runKernel->resolution_info->input_crop.right = roi.right; + runKernel->resolution_info->input_crop.top = roi.top; + runKernel->resolution_info->input_crop.bottom = roi.bottom; + } + else + { + // Fragments, leave the crop to espa crop, configure according to desired scale factor + // Since ESPA can only crop, make sure new output sizes are larger or equal to requested sizes + auto resInfo = runKernel->resolution_info; + + // If we have frgments, downscaler cannot perform left cropping + auto scaleFactorW = static_cast(roi.width) / outputWidth; + auto scaleFactorH = static_cast(roi.height) / outputHeight; + auto scaleFactor = std::max(scaleFactorW, scaleFactorH); + + runKernel->resolution_info->input_crop = _originalCropOfDownScaler; + + runKernel->resolution_info->output_width = std::max(outputWidth, + GRA_ROUND_UP(static_cast(ceil(static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right) / scaleFactor)), 4)); + runKernel->resolution_info->output_height = std::max(outputHeight, + GRA_ROUND_UP(static_cast(ceil(static_cast(resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom) / scaleFactor)), 2)); + + outputWidth = runKernel->resolution_info->output_width; + outputHeight = runKernel->resolution_info->output_height; + } + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelCropper(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, + StaticGraphKernelRes* downscalerResInfo, + uint32_t outputWidth, uint32_t outputHeight) +{ + runKernel->resolution_info->input_width = downscalerResInfo->output_width; + runKernel->resolution_info->input_height = downscalerResInfo->output_height; + + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // Configure to crop the required amount. + int32_t totalHorizontalCrop = runKernel->resolution_info->input_width - outputWidth; + + // Now crop to TNR size if any more cropping is required, according to the required ROI + uint32_t cropLeft = roi.left; + uint32_t cropRight = roi.right; + + if (downscalerResInfo->input_crop.right > 0) + { + double scale = static_cast(downscalerResInfo->output_width) / + (downscalerResInfo->input_width - downscalerResInfo->input_crop.left - downscalerResInfo->input_crop.right); + cropRight -= GRA_ROUND_UP(static_cast(downscalerResInfo->input_crop.right * scale), 2); + } + + // Calculate the crop after downscale, relatively to the desired crop before the downscale + cropLeft = (cropLeft + cropRight) == 0 ? 0 : + GRA_ROUND_DOWN(static_cast(GRA_ROUND(static_cast(cropLeft) / (cropLeft + cropRight) * totalHorizontalCrop)), 2); + + runKernel->resolution_info->input_crop.left = cropLeft; + runKernel->resolution_info->input_crop.right = totalHorizontalCrop - cropLeft; + + if (roi.left < static_cast(runKernel->resolution_info->input_crop.left)) + { + runKernel->resolution_info->input_crop.right += (runKernel->resolution_info->input_crop.left - roi.left); + runKernel->resolution_info->input_crop.left = roi.left; + } + if (roi.right < static_cast(runKernel->resolution_info->input_crop.right)) + { + runKernel->resolution_info->input_crop.left += (runKernel->resolution_info->input_crop.right - roi.right); + runKernel->resolution_info->input_crop.right = roi.right; + } + + int32_t totalVerticalCrop = runKernel->resolution_info->input_height - outputHeight; + + // Now crop to TNR size if any more cropping is required, according to the required ROI + uint32_t cropTop = roi.top; + uint32_t cropBottom = roi.bottom; + + if (downscalerResInfo->input_crop.bottom > 0) + { + double scale = static_cast(downscalerResInfo->output_height) / + (downscalerResInfo->input_height - downscalerResInfo->input_crop.top - downscalerResInfo->input_crop.bottom); + cropBottom -= GRA_ROUND_UP(static_cast(downscalerResInfo->input_crop.bottom * scale), 2); + } + + cropTop = (cropTop + cropBottom) == 0 ? 0 : + GRA_ROUND_DOWN(static_cast(GRA_ROUND(static_cast(cropTop) / (cropTop + cropBottom) * totalVerticalCrop)), 2); + + runKernel->resolution_info->input_crop.top = cropTop; + runKernel->resolution_info->input_crop.bottom = totalVerticalCrop - cropTop; + + if (roi.top < static_cast(runKernel->resolution_info->input_crop.top)) + { + runKernel->resolution_info->input_crop.bottom += (runKernel->resolution_info->input_crop.top - roi.top); + runKernel->resolution_info->input_crop.top = roi.top; + } + if (roi.bottom < static_cast(runKernel->resolution_info->input_crop.bottom)) + { + runKernel->resolution_info->input_crop.top += (runKernel->resolution_info->input_crop.bottom - roi.bottom); + runKernel->resolution_info->input_crop.bottom = roi.bottom; + } + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + // Update the left crop in striping system api. Currently assuming one stripe + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + // The following will update the system API for single stripe. In case there are additional stripes system API will + // be configured by FrgamentsConfigurator. + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + systemApi->x_output_offset_per_stripe[0] = runKernel->resolution_info->input_crop.left; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, StaticGraphKernelResCrop& cropperKernelCrop, + uint32_t inputWidth, uint32_t inputHeight, uint32_t outputWidth, uint32_t outputHeight) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + runKernel->resolution_info->input_width = inputWidth; + runKernel->resolution_info->input_height = inputHeight; + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // How much cropping is left for the upscaler to do after the cropper? + uint32_t totalCropW = roi.left + roi.right - cropperKernelCrop.left - cropperKernelCrop.right - _originalCropOfUpscaler.left - _originalCropOfUpscaler.right; + uint32_t totalCropH = roi.top + roi.bottom - cropperKernelCrop.top - cropperKernelCrop.bottom - _originalCropOfUpscaler.top - _originalCropOfUpscaler.bottom; + + // Cropping must be done in units of stepW x stepH. + // How many units of stepW x stepH should we crop? + uint32_t unitsW = GRA_ROUND_DOWN(totalCropW, _upscalerStepW) / _upscalerStepW; + uint32_t unitsH = GRA_ROUND_DOWN(totalCropH, _upscalerStepH) / _upscalerStepH; + + uint32_t units = unitsW < unitsH ? unitsW : unitsH; + + uint32_t actualCropW = units * _upscalerStepW; + uint32_t actualCropH = units * _upscalerStepH; + + uint32_t deltaLeft = GRA_ROUND_DOWN((totalCropW - actualCropW) / 2, 2); + uint32_t deltaRight = totalCropW - actualCropW - deltaLeft; + uint32_t deltaTop = GRA_ROUND_DOWN((totalCropH - actualCropH) / 2, 2); + uint32_t deltaBottom = totalCropH - actualCropH - deltaTop; + + runKernel->resolution_info->input_crop.left = roi.left - cropperKernelCrop.left - deltaLeft; + runKernel->resolution_info->input_crop.right = roi.right - cropperKernelCrop.right - deltaRight; + runKernel->resolution_info->input_crop.top = roi.top - cropperKernelCrop.top - deltaTop; + runKernel->resolution_info->input_crop.bottom = roi.bottom - cropperKernelCrop.bottom - deltaBottom; + + if (runKernel->resolution_info->input_crop.left < 0) + { + runKernel->resolution_info->input_crop.right += runKernel->resolution_info->input_crop.left; + runKernel->resolution_info->input_crop.left = 0; + } + if (runKernel->resolution_info->input_crop.right < 0) + { + runKernel->resolution_info->input_crop.left += runKernel->resolution_info->input_crop.right; + runKernel->resolution_info->input_crop.right = 0; + } + if (runKernel->resolution_info->input_crop.top < 0) + { + runKernel->resolution_info->input_crop.bottom += runKernel->resolution_info->input_crop.top; + runKernel->resolution_info->input_crop.top = 0; + } + if (runKernel->resolution_info->input_crop.bottom < 0) + { + runKernel->resolution_info->input_crop.top += runKernel->resolution_info->input_crop.bottom; + runKernel->resolution_info->input_crop.bottom = 0; + } + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelSmurf(SmurfKernelInfo* smurfInfo) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + auto resInfo = smurfInfo->_smurfRunKernel->resolution_info; + if (resInfo->input_width == 0 || resInfo->input_height == 0) + { + return StaticGraphStatus::SG_OK; + } + + // We need to update smurf's output crop according to device's new crop history + StaticGraphKernelRes* deviceResHist = smurfInfo->_deviceRunKernel->resolution_history; + StaticGraphKernelResCrop newCrop; + newCrop.left = deviceResHist->input_crop.left - smurfInfo->_originalDeviceCropHistory.left; + newCrop.right = deviceResHist->input_crop.right - smurfInfo->_originalDeviceCropHistory.right; + newCrop.top = deviceResHist->input_crop.top - smurfInfo->_originalDeviceCropHistory.top; + newCrop.bottom = deviceResHist->input_crop.bottom - smurfInfo->_originalDeviceCropHistory.bottom; + + // Now calculate how much is left for the smurf to crop + // Translate from history units to device units + double newInputToDeviceFactor = static_cast(deviceResHist->input_width - deviceResHist->input_crop.left - deviceResHist->input_crop.right) / + deviceResHist->output_width; + + // Now translate from history units to smurf output (device) + newCrop.left = static_cast(newCrop.left / newInputToDeviceFactor); + newCrop.right = static_cast(newCrop.right / newInputToDeviceFactor); + newCrop.top = static_cast(newCrop.top / newInputToDeviceFactor); + newCrop.bottom = static_cast(newCrop.bottom / newInputToDeviceFactor); + + smurfInfo->_smurfRunKernel->resolution_info->output_crop.left = smurfInfo->_originalSmurfOutputCrop.left + newCrop.left; + smurfInfo->_smurfRunKernel->resolution_info->output_crop.right = smurfInfo->_originalSmurfOutputCrop.right + newCrop.right; + smurfInfo->_smurfRunKernel->resolution_info->output_crop.top = smurfInfo->_originalSmurfOutputCrop.top + newCrop.top; + smurfInfo->_smurfRunKernel->resolution_info->output_crop.bottom = smurfInfo->_originalSmurfOutputCrop.bottom + newCrop.bottom; + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::SanityCheck() +{ + // Resolution hist output must be same as info input + if (_downscalerRunKernel->resolution_info->input_width != _downscalerRunKernel->resolution_history->output_width || + _downscalerRunKernel->resolution_info->input_height != _downscalerRunKernel->resolution_history->output_height || + + _upscalerRunKernel->resolution_info->input_width != _upscalerRunKernel->resolution_history->output_width || + _upscalerRunKernel->resolution_info->input_height != _upscalerRunKernel->resolution_history->output_height || + + _cropperRunKernel->resolution_info->input_width != _cropperRunKernel->resolution_history->output_width || + _cropperRunKernel->resolution_info->input_height != _cropperRunKernel->resolution_history->output_height) + { + return StaticGraphStatus::SG_ERROR; + } + + // Resolution consistency + if (_downscalerRunKernel->resolution_info->output_width != _cropperRunKernel->resolution_info->input_width || + _downscalerRunKernel->resolution_info->output_height != _cropperRunKernel->resolution_info->input_height || + + _cropperRunKernel->resolution_info->output_width != _upscalerRunKernel->resolution_info->input_width || + _cropperRunKernel->resolution_info->output_height != _upscalerRunKernel->resolution_info->input_height) + { + return StaticGraphStatus::SG_ERROR; + } + + // Cropping values + + if (SanityCheckCrop(&_downscalerRunKernel->resolution_info->input_crop) == StaticGraphStatus::SG_ERROR || + SanityCheckCrop(&_upscalerRunKernel->resolution_info->input_crop) == StaticGraphStatus::SG_ERROR || + SanityCheckCrop(&_cropperRunKernel->resolution_info->input_crop) == StaticGraphStatus::SG_ERROR) + { + return StaticGraphStatus::SG_ERROR; + } + + // Make sure DS is actually down scaling + int32_t widthAfterCrop = _downscalerRunKernel->resolution_info->input_width - _downscalerRunKernel->resolution_info->input_crop.left - _downscalerRunKernel->resolution_info->input_crop.right; + int32_t heightAfterCrop = _downscalerRunKernel->resolution_info->input_height - _downscalerRunKernel->resolution_info->input_crop.top - _downscalerRunKernel->resolution_info->input_crop.bottom; + + if (widthAfterCrop < 0 || widthAfterCrop < _downscalerRunKernel->resolution_info->output_width || + heightAfterCrop < 0 || heightAfterCrop < _downscalerRunKernel->resolution_info->output_height || + static_cast(widthAfterCrop) / _downscalerRunKernel->resolution_info->output_width > 16) + { + return StaticGraphStatus::SG_ERROR; + } + + // Make sure US is actually up scaling + widthAfterCrop = _upscalerRunKernel->resolution_info->input_width - _upscalerRunKernel->resolution_info->input_crop.left - _upscalerRunKernel->resolution_info->input_crop.right; + heightAfterCrop = _upscalerRunKernel->resolution_info->input_height - _upscalerRunKernel->resolution_info->input_crop.top - _upscalerRunKernel->resolution_info->input_crop.bottom; + + if (widthAfterCrop < 0 || widthAfterCrop > _upscalerRunKernel->resolution_info->output_width || + heightAfterCrop < 0 || heightAfterCrop > _upscalerRunKernel->resolution_info->output_height || + static_cast(_upscalerRunKernel->resolution_history->output_width) / widthAfterCrop > 16) + { + return StaticGraphStatus::SG_ERROR; + } + + // Validate upscaler scale ratio constraints + if (static_cast(widthAfterCrop) / _upscalerRunKernel->resolution_info->output_width != + static_cast(heightAfterCrop) / _upscalerRunKernel->resolution_info->output_height) + { + return StaticGraphStatus::SG_ERROR; + } + + // Make sure cropper is actually cropping + widthAfterCrop = _cropperRunKernel->resolution_info->input_width - _cropperRunKernel->resolution_info->input_crop.left - _cropperRunKernel->resolution_info->input_crop.right; + heightAfterCrop = _cropperRunKernel->resolution_info->input_height - _cropperRunKernel->resolution_info->input_crop.top - _cropperRunKernel->resolution_info->input_crop.bottom; + + if (widthAfterCrop < 0 || widthAfterCrop != _cropperRunKernel->resolution_info->output_width || + heightAfterCrop < 0 || heightAfterCrop != _cropperRunKernel->resolution_info->output_height) + { + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::SanityCheckCrop(StaticGraphKernelResCrop* crop) +{ + if (crop->top < 0 || crop->bottom < 0 || crop->left < 0 || crop->right < 0 || + crop->top & 1 || crop->bottom & 1 || crop->left & 1 || crop->right & 1) + { + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::getInputRoiForOutput(const ResolutionRoi& roi, HwSink hwSink, SensorRoi& sensorRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + + StaticGraphRunKernel* outputRunKernel; + if (initRunKernel(kernelUuid, outputRunKernel) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // We want to calculate the scaling ratio without taking any cropping into consideration + double widthIn2OutScale = static_cast(outputRunKernel->resolution_history->input_width - + outputRunKernel->resolution_history->input_crop.left - + outputRunKernel->resolution_history->input_crop.right) / outputRunKernel->resolution_history->output_width; + + double heightIn2OutScale = static_cast(outputRunKernel->resolution_history->input_height - + outputRunKernel->resolution_history->input_crop.top - + outputRunKernel->resolution_history->input_crop.bottom) / outputRunKernel->resolution_history->output_height; + + StaticGraphKernelResCrop outputCropHist = outputRunKernel->resolution_history->input_crop; + StaticGraphKernelResCrop outputCrop = { 0,0,0,0 }; + if (outputRunKernel->resolution_info != nullptr) + { + outputCrop = outputRunKernel->resolution_info->input_crop; + + // Translate crop to sensor units, w/out this kernel's scaling since input crop is done before scaling. + outputCrop.left += static_cast(outputCrop.left * widthIn2OutScale); + outputCrop.right += static_cast(outputCrop.right * widthIn2OutScale); + outputCrop.top += static_cast(outputCrop.top * heightIn2OutScale); + outputCrop.bottom += static_cast(outputCrop.bottom * heightIn2OutScale); + + widthIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_width - + outputRunKernel->resolution_info->input_crop.left - + outputRunKernel->resolution_info->input_crop.right) / outputRunKernel->resolution_info->output_width; + + heightIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_height - + outputRunKernel->resolution_info->input_crop.top - + outputRunKernel->resolution_info->input_crop.bottom) / outputRunKernel->resolution_info->output_height; + } + + // Now remove any scaling done by sensor itself + widthIn2OutScale *= _sensorHorizontalScaling; + heightIn2OutScale *= _sensorVerticalScaling; + + if ((outputCropHist.left < _sensorHorizontalCropLeft) || + (outputCropHist.right < _sensorHorizontalCropRight) || + (outputCropHist.top < _sensorVerticalCropTop) || + (outputCropHist.bottom < _sensorVerticalCropBottom)) { + return StaticGraphStatus::SG_ERROR; + } + + // Translate to ROI on input + sensorRoi.width = GRA_ROUND_UP(static_cast(roi.width * widthIn2OutScale), 2); + sensorRoi.height = GRA_ROUND_UP(static_cast(roi.height * heightIn2OutScale), 2); + sensorRoi.cropLeft = GRA_ROUND_UP(static_cast((roi.left * widthIn2OutScale) + ((outputCropHist.left - _sensorHorizontalCropLeft) * _sensorHorizontalScaling) + outputCrop.left), 2); + sensorRoi.cropRight = GRA_ROUND_UP(static_cast((roi.right * widthIn2OutScale) + ((outputCropHist.right - _sensorHorizontalCropRight) * _sensorHorizontalScaling) + outputCrop.right), 2); + sensorRoi.cropTop = GRA_ROUND_UP(static_cast((roi.top * heightIn2OutScale) + ((outputCropHist.top - _sensorVerticalCropTop) * _sensorVerticalScaling) + outputCrop.top), 2); + sensorRoi.cropBottom = GRA_ROUND_UP(static_cast((roi.bottom * heightIn2OutScale) + ((outputCropHist.bottom - _sensorVerticalCropBottom) * _sensorVerticalScaling) + outputCrop.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi) +{ + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink::AeOutSink, graphId, links); + StaticGraphRunKernel* aeRunKernel; + if (initRunKernel(kernelUuid, aeRunKernel) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelResCrop aeCropHist = aeRunKernel->resolution_history->input_crop; + + // Compute stat ROI relative to sensor roi + + double widthIn2OutScale = static_cast(aeRunKernel->resolution_history->output_width) / + (aeRunKernel->resolution_history->input_width - aeCropHist.left - aeCropHist.right); + + double heightIn2OutScale = static_cast(aeRunKernel->resolution_history->output_height) / + (aeRunKernel->resolution_history->input_height - aeCropHist.top - aeCropHist.bottom); + + statsRoi.width = GRA_ROUND_UP(static_cast(sensorRoi.width * widthIn2OutScale), 2); + statsRoi.height = GRA_ROUND_UP(static_cast(sensorRoi.height * heightIn2OutScale), 2); + statsRoi.left = GRA_ROUND_UP(static_cast((sensorRoi.cropLeft * widthIn2OutScale) + aeCropHist.left), 2); + statsRoi.right = GRA_ROUND_UP(static_cast((sensorRoi.cropRight * widthIn2OutScale) + aeCropHist.right), 2); + statsRoi.top = GRA_ROUND_UP(static_cast((sensorRoi.cropTop * heightIn2OutScale) + aeCropHist.top), 2); + statsRoi.bottom = GRA_ROUND_UP(static_cast((sensorRoi.cropBottom * heightIn2OutScale) + aeCropHist.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfigurator.h b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.h new file mode 100644 index 0000000..171828a --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.h @@ -0,0 +1,243 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include +#include +#include + +#define _USE_MATH_DEFINES +#define GRA_ROUND_UP(a,b) (((a) + ((b)-1)) / (b) * (b)) +#define GRA_ROUND_DOWN(a,b) ((a) / (b) * (b)) +#define GRA_ROUND(a) (((double)(a) > 0.0) ? floor((double)(a) + 0.5) : ceil((double)(a) - 0.5)) + +// ROI in user level +class RegionOfInterest +{ +public: + double zoomFactor; + double panFactor; + double tiltFactor; + + // If true, take factors relative to sensor image + // (needed for WFOV face tracking for example) + bool fromInput; +}; + +// ROI translated to sensor resolution +// sensor width = crop.left + width + crop.right +// sensor height = crop.top + height + crop.bottom +class SensorRoi +{ +public: + uint32_t width; // ROI width + uint32_t height; // ROI height + uint32_t cropLeft; // Crop from sensor width to ROI left + uint32_t cropRight; // Crop from sensor width from ROI right + uint32_t cropTop; // Crop from sensor height to ROI top + uint32_t cropBottom; // Crop from sensor height from ROI bottom +}; + +class ResolutionRoi +{ +public: + uint32_t width; // ROI width + uint32_t height; // ROI height + uint32_t left; // ROI left point + uint32_t right; // ROI right point + uint32_t top; // ROI top point + uint32_t bottom; // ROI bottom point +}; + +enum class GraphResolutionConfiguratorKernelRole : uint8_t +{ + UpScaler, + DownScaler, + EspaCropper, + NonRcb, + Output, + TnrOutput, + TnrScaler, + TnrFeederFull, + TnrFeederSmall, + Smurf, + SmurfFeeder, + None +}; + +class RunKernelCoords +{ +public: + RunKernelCoords() + { + nodeInd = 0; + kernelInd = 0; + } + uint32_t nodeInd; + uint32_t kernelInd; +}; + +class GraphResolutionConfigurator +{ +public: + GraphResolutionConfigurator(IStaticGraphConfig* staticGraph); + ~GraphResolutionConfigurator() + { + _kernelsForUpdate.clear(); + } + + StaticGraphStatus updateStaticGraphConfig(const RegionOfInterest& roi, + const RegionOfInterest& prevRoi, + bool isCenteredZoom, + bool prevIsCenteredZoom, + bool& isKeyResolutionChanged); + // Calculate ROI in sensor dimensions. User ROI is given relative to *full* output ROI + StaticGraphStatus getSensorRoi(const RegionOfInterest& userRoi, SensorRoi& sensorRoi); + // Calculate ROI in sensor dimensions. Resolution ROI is given relative to *final* (zoomed) output ROI + StaticGraphStatus getInputRoiForOutput(const ResolutionRoi& roi, const HwSink hwSink, SensorRoi& sensorRoi); + + // Calculate ROI in sensor dimensions. Resolution ROI is given relative to *final* (zoomed) output ROI + // This function is used for statistics output only + StaticGraphStatus getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi); + StaticGraphStatus undoSensorCropandScale(SensorRoi& sensor_roi); + StaticGraphStatus sensorCropOrScaleExist(bool& sensor_crop_or_scale_exist); + StaticGraphStatus undoSensorScaleRipAngle(int32_t& rip_angle); + + static const int SCALE_PREC = 16; +protected: + StaticGraphStatus updateRunKernelPassThrough(StaticGraphRunKernel* runKernel, uint32_t width, uint32_t height); + StaticGraphStatus updateRunKernelResolutionHistory(StaticGraphRunKernel* runKernel, StaticGraphRunKernel* prevRunKernel, bool updateResolution = true); + + IStaticGraphConfig* _staticGraph; + double _widthIn2OutScale = 1; + double _heightIn2OutScale = 1; + + double _sensorHorizontalScaling = 1.0; + double _sensorVerticalScaling = 1.0; + size_t _sensorHorizontalCropLeft; + size_t _sensorHorizontalCropRight; + size_t _sensorVerticalCropTop; + size_t _sensorVerticalCropBottom; + +private: + StaticGraphStatus initRunKernelCoord(GraphResolutionConfiguratorKernelRole role, RunKernelCoords& coord); + StaticGraphStatus initOutputRunKernelCoord(RunKernelCoords& coord); + StaticGraphStatus initKernelCoordsForUpdate(); + StaticGraphStatus findRunKernel(uint32_t kernelUuid, RunKernelCoords& coord); + + StaticGraphRunKernel* getRunKernel(RunKernelCoords& coord); +#if SUPPORT_KEY_RESOLUTIONS == 1 + StaticGraphStatus getZoomKeyResolutionIndex(ZoomKeyResolutions* zoomKeyResolutions, SensorRoi sensorRoi, uint32_t& selectedIndex); +#endif + StaticGraphStatus updateRunKernelOfScalers(bool fromInput, SensorRoi& roi); + + StaticGraphStatus updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, SensorRoi& roi, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, StaticGraphKernelResCrop* originalScalerCrop); + StaticGraphStatus adjustDownscalerCrop(StaticGraphKernelRes* scalerResInfo); + StaticGraphStatus updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, uint32_t& upscalerActualInputWidth, uint32_t& upscalerActualInputHeight, + uint32_t& upscalerActualOutputWidth, uint32_t& upscalerActualOutputHeight); + StaticGraphStatus updateRunKernelFinalCropper(StaticGraphRunKernel* runKernel, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight); + StaticGraphStatus updateCroppingScaler(StaticGraphRunKernel* downscalerRunKernel, StaticGraphRunKernel* upscalerRunKernel); + + RunKernelCoords _downscalerRunKernelCoord; + RunKernelCoords _upscalerRunKernelCoord; + RunKernelCoords _cropperRunKernelCoord; + RunKernelCoords _outputRunKernelCoord; + std::vector _kernelsForUpdate; + + StaticGraphKernelResCrop _originalCropOfFinalCropper = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalCropInputToScaler = {0,0,0,0}; + StaticGraphKernelResCrop _originalCropScalerToOutput = { 0,0,0,0 }; +}; + +class Ipu8FragmentsConfigurator; + +class SmurfKernelInfo +{ +public: + StaticGraphRunKernel* _smurfRunKernel; + StaticGraphRunKernel* _deviceRunKernel; + StaticGraphKernelResCrop _originalDeviceCropHistory = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalSmurfOutputCrop = { 0,0,0,0 }; +}; + +class Ipu8GraphResolutionConfigurator : public GraphResolutionConfigurator +{ +public: + Ipu8GraphResolutionConfigurator(IStaticGraphConfig* staticGraph); + ~Ipu8GraphResolutionConfigurator(); + + StaticGraphStatus updateStaticGraphConfig(const RegionOfInterest& roi, bool isCenteredZoom); + + virtual StaticGraphStatus getInputRoiForOutput(const ResolutionRoi& roi, const HwSink hwSink, SensorRoi& sensorRoi); + + // Calculate ROI in sensor dimensions. Resolution ROI is given relative to *final* (zoomed) output ROI + // This function is used for statistics output only + virtual StaticGraphStatus getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi); + +private: + StaticGraphStatus initRunKernel(GraphResolutionConfiguratorKernelRole role, StaticGraphRunKernel*& runKernel); + StaticGraphStatus initRunKernel(uint32_t kernelUuid, StaticGraphRunKernel*& runKernel); + StaticGraphStatus initOutputRunKernel(); + StaticGraphStatus initKernelsForUpdate(); + StaticGraphStatus initIsFragments(); + + // Calculate ROI in dimensions of pipe downscaler input. + StaticGraphStatus getDownscalerInputRoi(const RegionOfInterest& userRoi, ResolutionRoi& pipeInputRoi); + + StaticGraphStatus updateRunKernelOfScalers(ResolutionRoi& roi); + + StaticGraphStatus updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, uint32_t& outputWidth, uint32_t& outputHeight); + StaticGraphStatus updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, StaticGraphKernelResCrop& cropperKernelCrop, uint32_t inputWidth, uint32_t inputHeight, uint32_t outputWidth, uint32_t outputHeight); + StaticGraphStatus updateRunKernelCropper(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, StaticGraphKernelRes* downscalerResInfo, uint32_t outputWidth, uint32_t outputHeight); + StaticGraphStatus updateRunKernelSmurf(SmurfKernelInfo* smurfInfo); + + StaticGraphStatus SanityCheck(); + StaticGraphStatus SanityCheckCrop(StaticGraphKernelResCrop* crop); + + uint32_t _upscalerStepW = 1; + uint32_t _upscalerStepH = 1; + + StaticGraphKernelResCrop _originalCropOfDownScaler = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalCropOfUpscaler = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalCropOfOutput = { 0,0,0,0 }; + StaticGraphKernelResCrop _originaHistoryOfOutput = { 0,0,0,0 }; + + StaticGraphRunKernel* _downscalerRunKernel; + StaticGraphRunKernel* _cropperRunKernel; + StaticGraphRunKernel* _upscalerRunKernel; + StaticGraphRunKernel* _outputRunKernel; + std::vector _kernelsForUpdateAfterCropper; + std::vector _kernelsForUpdateAfterUpscaler; + std::vector _smurfKernels; + + // For striping + OuterNode* _node = nullptr; + Ipu8FragmentsConfigurator* _fragmentsConfigurator = nullptr; + bool _isFragments = false; +}; diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.cpp new file mode 100644 index 0000000..3142dfa --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "GraphResolutionConfiguratorAutogen.h" + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuid( + GraphResolutionConfiguratorKernelRole role) { + switch (role) { + case GraphResolutionConfiguratorKernelRole::UpScaler: + return 28787; // image_upscaler_1_1 + case GraphResolutionConfiguratorKernelRole::DownScaler: + return 40299; // b2i_ds_1_1 + case GraphResolutionConfiguratorKernelRole::EspaCropper: + return 65466; // lbff_crop_espa_1_4 + } + + return 0; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, + GraphLink** links) { + (void)graphId; + (void)links; + + switch (hwSink) { + case HwSink::ImageMpSink: + return 16460; // odr_ofs_mp_1_4 + case HwSink::ImageDpSink: + return 37951; // odr_ofs_dp_1_4 + case HwSink::ProcessedMainSink: + switch (graphId) { + case 100001: // Bayer_NoPdaf_WithDvs_NoTnr + case 100003: // Bayer_NoPdaf_WithDvs_WithTnr + case 100080: // Bayer_NoPdaf_WithGdc_WithTnr + case 100081: // Bayer_NoPdaf_WithGdc_WithDvs_WithTnr + case 100005: // Bayer_WithPdaf2_WithDvs_NoTnr + case 100007: // Bayer_WithPdaf2_WithDvs_WithTnr + case 100009: // Bayer_WithPdaf3_WithDvs_NoTnr + case 100011: // Bayer_WithPdaf3_WithDvs_WithTnr + case 100013: // Dol2Inputs_WithDvs_NoTnr + case 100015: // Dol2Inputs_WithDvs_WithTnr + case 100017: // Dol3Inputs_NoBurst_WithDvs_NoTnr + case 100019: // Dol3Inputs_NoBurst_WithDvs_WithTnr + case 100021: // RgbIr_WithDvs_NoTnr + case 100023: // RgbIr_WithDvs_WithTnr + case 100040: // Mipi_WithDvs + case 100041: // Mipi_WithDvs_WithTnr + case 100028: // Ir_WithDvs_NoTnr + case 100030: // Ir_WithDvs_WithTnr + case 100032: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr + case 100034: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr + case 100101: // Bayer_NoPdaf_WithDvs_NoTnr_WithSap + case 100103: // Bayer_NoPdaf_WithDvs_WithTnr_WithSap + case 100105: // Bayer_WithPdaf2_WithDvs_NoTnr_WithSap + case 100107: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap + case 100109: // Bayer_WithPdaf3_WithDvs_NoTnr_WithSap + case 100111: // Bayer_WithPdaf3_WithDvs_WithTnr_WithSap + case 100113: // Dol2Inputs_WithDvs_NoTnr_WithSap + case 100115: // Dol2Inputs_WithDvs_WithTnr_WithSap + case 100117: // Dol3Inputs_NoBurst_WithDvs_NoTnr_WithSap + case 100119: // Dol3Inputs_NoBurst_WithDvs_WithTnr_WithSap + case 100121: // RgbIr_WithDvs_NoTnr_WithSap + case 100123: // RgbIr_WithDvs_WithTnr_WithSap + case 100128: // Ir_WithDvs_NoTnr_WithSap + case 100130: // Ir_WithDvs_WithTnr_WithSap + case 100132: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr_WithSap + case 100134: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr_WithSap + return 5637; // gdc7_1 + case 100079: // Bayer_NoPdaf_WithNntm_WithTnr + case 100045: // Bayer_WithPdaf3_WithNntm_WithTnr + case 100012: // Dol2Inputs_NoGmv_NoTnr + case 100014: // Dol2Inputs_NoGmv_WithTnr + case 100016: // Dol3Inputs_NoBurst_NoGmv_NoTnr + case 100018: // Dol3Inputs_NoBurst_NoGmv_WithTnr + return 46539; // nntm_1_0 + } + break; + case HwSink::ProcessedSecondarySink: + return 19706; // sw_scaler + case HwSink::AeOutSink: + return 55073; // aestatistics_2_1 + default: + return 0; + } + + return 0; +} + +StaticGraphStatus GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate( + std::vector& kernelUuids, uint32_t startUuid) { + kernelUuids.clear(); + + // Must take only one from each resolution history index, since in static graph they all share + // the same resolution history instance + if (startUuid == 65466) // ESPA Crop + { + kernelUuids.push_back(40280); // gmv_statistics_1_1 + kernelUuids.push_back(7416); // odr_gmv_feature_1_4 + kernelUuids.push_back(41148); // odr_gmv_match_1_4 + kernelUuids.push_back(2495); // tnr7_spatial_1_1 + kernelUuids.push_back(20119); // tnr7_blend_1_1 + kernelUuids.push_back(65437); // odr_tnr_scale_fp_yuv4n_1_4 + kernelUuids.push_back(23639); // tnr7_ims_1_2 + kernelUuids.push_back(1502); // tnr7_bc_1_2 + } else if (startUuid == 28787) // Upscaler + { + kernelUuids.push_back(9385); // cas_1_1 + kernelUuids.push_back(37951); // odr_ofs_dp_1_4 + kernelUuids.push_back(5637); // gdc7_1 + kernelUuids.push_back(46539); // nntm_1_0 + kernelUuids.push_back(19706); // sw_scaler + } + return StaticGraphStatus::SG_OK; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid() { + return 47417; +} diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.h new file mode 100644 index 0000000..c934e28 --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once +#include + +#include "GraphResolutionConfigurator.h" +#include "StaticGraphAutogen.h" +#include "StaticGraphTypesAutogen.h" + +class GraphResolutionConfiguratorHelper { + public: + GraphResolutionConfiguratorHelper(); + + static uint32_t getRunKernelUuid(GraphResolutionConfiguratorKernelRole role); + static uint32_t getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, GraphLink** links); + static StaticGraphStatus getRunKernelUuidForResHistoryUpdate(std::vector& kernelUuids, + uint32_t startUuid = 0); + static uint32_t getRunKernelIoBufferSystemApiUuid(); +}; diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfiguratorInclude.h b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorInclude.h new file mode 100644 index 0000000..1eceba9 --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorInclude.h @@ -0,0 +1,46 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include + +#if defined(GRC_IPU7X) +#include "Ipu7xStaticGraphAutogen.h" +#include "Ipu7xStaticGraphTypesAutogen.h" +#include "Ipu7xGraphResolutionConfiguratorAutogen.h" +#elif defined(GRC_IPU75XA) +#include "Ipu75xaStaticGraphAutogen.h" +#include "Ipu75xaStaticGraphTypesAutogen.h" +#include "Ipu75xaGraphResolutionConfiguratorAutogen.h" +#elif defined(GRC_IPU8) +#include "Ipu8StaticGraphAutogen.h" +#include "Ipu8StaticGraphTypesAutogen.h" +#include "Ipu8GraphResolutionConfiguratorAutogen.h" +#else +#include "StaticGraphAutogen.h" +#include "StaticGraphTypesAutogen.h" +#include "GraphResolutionConfiguratorAutogen.h" +#endif diff --git a/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.cpp new file mode 100644 index 0000000..13d96a4 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.cpp @@ -0,0 +1,286 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8GraphResolutionConfiguratorAutogen.h" + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuid(GraphResolutionConfiguratorKernelRole role) +{ + switch (role) + { + case GraphResolutionConfiguratorKernelRole::UpScaler: return 28787; // image_upscaler_1_1 + case GraphResolutionConfiguratorKernelRole::DownScaler: return 40299; // b2i_ds_1_1 + case GraphResolutionConfiguratorKernelRole::EspaCropper: return 65466; // lbff_crop_espa_1_4 + } + + return 0; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, GraphLink** links) +{ + (void)graphId; + (void)links; + + switch (hwSink) + { + case HwSink::ImageMpSink: return 16460; // odr_ofs_mp_1_4 + case HwSink::ImageDpSink: return 37951; // odr_ofs_dp_1_4 + case HwSink::ProcessedMainSink: + switch(graphId) + { + case 100001: // Bayer_NoPdaf_WithDvs_NoTnr + case 100003: // Bayer_NoPdaf_WithDvs_WithTnr + case 100137: // Bayer_NoPdaf_WithDvs_WithTnr_WithSap_WithGdc + case 100080: // Bayer_NoPdaf_WithGdc_WithTnr + case 100138: // Bayer_NoPdaf_WithGdc_WithTnr_WithSap + case 100142: // Bayer_WithPdaf2_WithGdc_WithTnr_WithSap + case 100143: // Bayer_WithPdaf3_WithGdc_WithTnr_WithSap + case 100144: // Bayer_WithPdaf3asPdaf2_WithGdc_WithTnr_WithSap + case 100081: // Bayer_NoPdaf_WithGdc_WithDvs_WithTnr + case 100005: // Bayer_WithPdaf2_WithDvs_NoTnr + case 100007: // Bayer_WithPdaf2_WithDvs_WithTnr + case 100139: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap_WithGdc + case 100009: // Bayer_WithPdaf3_WithDvs_NoTnr + case 100011: // Bayer_WithPdaf3_WithDvs_WithTnr + case 100140: // Bayer_WithPdaf3_WithDvs_WithTnr_WithSap_WithGdc + case 100013: // Dol2Inputs_WithDvs_NoTnr + case 100015: // Dol2Inputs_WithDvs_WithTnr + case 100017: // Dol3Inputs_NoBurst_WithDvs_NoTnr + case 100019: // Dol3Inputs_NoBurst_WithDvs_WithTnr + case 100021: // RgbIr_WithDvs_NoTnr + case 100023: // RgbIr_WithDvs_WithTnr + case 100040: // Mipi_WithDvs + case 100041: // Mipi_WithDvs_WithTnr + case 100028: // Ir_WithDvs_NoTnr + case 100030: // Ir_WithDvs_WithTnr + case 100032: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr + case 100034: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr + case 100141: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr_WithSap_WithGdc + case 100101: // Bayer_NoPdaf_WithDvs_NoTnr_WithSap + case 100103: // Bayer_NoPdaf_WithDvs_WithTnr_WithSap + case 100105: // Bayer_WithPdaf2_WithDvs_NoTnr_WithSap + case 100107: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap + case 100109: // Bayer_WithPdaf3_WithDvs_NoTnr_WithSap + case 100111: // Bayer_WithPdaf3_WithDvs_WithTnr_WithSap + case 100113: // Dol2Inputs_WithDvs_NoTnr_WithSap + case 100146: // Dol2Inputs_NoGmv_WithTnr_WithSap_WithGdc + case 100115: // Dol2Inputs_WithDvs_WithTnr_WithSap + case 100117: // Dol3Inputs_NoBurst_WithDvs_NoTnr_WithSap + case 100119: // Dol3Inputs_NoBurst_WithDvs_WithTnr_WithSap + case 100121: // RgbIr_WithDvs_NoTnr_WithSap + case 100123: // RgbIr_WithDvs_WithTnr_WithSap + case 100128: // Ir_WithDvs_NoTnr_WithSap + case 100130: // Ir_WithDvs_WithTnr_WithSap + case 100132: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr_WithSap + case 100134: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr_WithSap + case 100236: // Bayer_NoPdaf_WithDvs_NoTnr + case 100203: // Bayer_NoPdaf_WithDvs_WithTnr + case 100280: // Bayer_NoPdaf_WithGdc_WithTnr + case 100281: // Bayer_NoPdaf_WithGdc_WithDvs_WithTnr + case 100205: // Bayer_WithPdaf2_WithDvs_NoTnr + case 100207: // Bayer_WithPdaf2_WithDvs_WithTnr + case 100209: // Bayer_WithPdaf3_WithDvs_NoTnr + case 100211: // Bayer_WithPdaf3_WithDvs_WithTnr + case 100213: // Dol2Inputs_WithDvs_NoTnr + case 100215: // Dol2Inputs_WithDvs_WithTnr + case 100217: // Dol3Inputs_NoBurst_WithDvs_NoTnr + case 100219: // Dol3Inputs_NoBurst_WithDvs_WithTnr + case 100221: // RgbIr_WithDvs_NoTnr + case 100223: // RgbIr_WithDvs_WithTnr + case 100240: // Mipi_WithDvs + case 100241: // Mipi_WithDvs_WithTnr + case 100228: // Ir_WithDvs_NoTnr + case 100230: // Ir_WithDvs_WithTnr + case 100232: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr + case 100234: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr + return 5637; // gdc7_1 + case 100079: // Bayer_NoPdaf_WithNntm_WithTnr + case 100066: // Bayer_WithPdaf2_NoGmv_WithTnr_WithNntm + case 100067: // Bayer_WithPdaf2_WithDvs_WithTnr_WithNntm + case 100045: // Bayer_WithPdaf3_WithNntm_WithTnr + case 100012: // Dol2Inputs_NoGmv_NoTnr + case 100014: // Dol2Inputs_NoGmv_WithTnr + case 100016: // Dol3Inputs_NoBurst_NoGmv_NoTnr + case 100018: // Dol3Inputs_NoBurst_NoGmv_WithTnr + case 100135: // Bayer_NoPdaf_WithNntm_WithTnr_WithSap + case 100166: // Bayer_WithPdaf2_NoGmv_WithTnr_WithSap_WithNntm + case 100145: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap_WithNntm + case 100136: // Bayer_WithPdaf3_WithNntm_WithTnr_WithSap + case 100200: // Bayer_WithPdaf3asPdaf2_WithNntm_WithTnr_WithSap + case 100201: // Bayer_WithPdaf3asPdaf2_WithNntm_WithTnr_NoSap + case 100114: // Dol2Inputs_NoGmv_WithTnr_WithSap + case 100279: // Bayer_NoPdaf_WithNntm_WithTnr + case 100266: // Bayer_WithPdaf2_NoGmv_WithTnr_WithNntm + case 100267: // Bayer_WithPdaf2_WithDvs_WithTnr_WithNntm + case 100245: // Bayer_WithPdaf3_WithNntm_WithTnr + case 100212: // Dol2Inputs_NoGmv_NoTnr + case 100214: // Dol2Inputs_NoGmv_WithTnr + case 100216: // Dol3Inputs_NoBurst_NoGmv_NoTnr + case 100218: // Dol3Inputs_NoBurst_NoGmv_WithTnr + return 46539; // nntm_1_0 + } + break; + case HwSink::ProcessedSecondarySink: return 19706; // sw_scaler + case HwSink::AeOutSink: return 55073; // aestatistics_2_1 + } + + return 0; +} + +StaticGraphStatus GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(std::vector& kernelUuids, uint32_t startUuid) +{ + kernelUuids.clear(); + + // Must take only one from each resolution history index, since in static graph they all share the same + // resolution history instance + if (startUuid == 0) + { + return StaticGraphStatus::SG_ERROR; + } + + if (startUuid == 65466) // ESPA Crop + { + kernelUuids.push_back(40280); // gmv_statistics_1_1 + kernelUuids.push_back(7416); // odr_gmv_feature_1_4 + kernelUuids.push_back(41148); // odr_gmv_match_1_4 + kernelUuids.push_back(2495); // tnr7_spatial_1_1 + kernelUuids.push_back(20119); // tnr7_blend_1_1 + kernelUuids.push_back(65437); // odr_tnr_scale_fp_yuv4n_1_4 + kernelUuids.push_back(23639); // tnr7_ims_1_2 + kernelUuids.push_back(1502); // tnr7_bc_1_2 + } + else if (startUuid == 28787) // Upscaler + { + kernelUuids.push_back(9385); // cas_1_1 + kernelUuids.push_back(37951); // odr_ofs_dp_1_4 + kernelUuids.push_back(5637); // gdc7_1 + kernelUuids.push_back(19706); // sw_scaler + kernelUuids.push_back(46539); // nntm_1_0 + } + return StaticGraphStatus::SG_OK; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid() +{ + return 47417; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelDownscalerSystemApiUuid() +{ + return 2102; +} + +GraphResolutionConfiguratorKernelRole GraphResolutionConfiguratorHelper::getKernelRole(uint32_t kernelUuid) +{ + switch (kernelUuid) + { + case 28787 : return GraphResolutionConfiguratorKernelRole::UpScaler; // image_upscaler_1_1 + case 40299 : return GraphResolutionConfiguratorKernelRole::DownScaler; // b2i_ds_1_1 + case 50136 : return GraphResolutionConfiguratorKernelRole::DownScaler; // b2i_ds_output_1_1 + case 65466 : return GraphResolutionConfiguratorKernelRole::EspaCropper; // lbff_crop_espa_1_4 + case 9385 : return GraphResolutionConfiguratorKernelRole::NonRcb; // cas_1_1 + case 16460 : return GraphResolutionConfiguratorKernelRole::Output; // odr_ofs_mp_1_4 + case 37951 : return GraphResolutionConfiguratorKernelRole::Output; // odr_ofs_dp_1_4 + case 63731 : return GraphResolutionConfiguratorKernelRole::TnrOutput; // odr_tnr_sp_bc_rs4n_1_4 + case 5215 : return GraphResolutionConfiguratorKernelRole::TnrOutput; // odr_tnr_fp_yuvn_1_4 + case 65437 : return GraphResolutionConfiguratorKernelRole::TnrOutput; // odr_tnr_scale_fp_yuv4n_1_4 + case 29996 : return GraphResolutionConfiguratorKernelRole::TnrScaler; // tnr_scaler_lb_1_1 + case 20623 : return GraphResolutionConfiguratorKernelRole::TnrScaler; // tnr_scaler_fp_1_1 + case 16295 : return GraphResolutionConfiguratorKernelRole::TnrFeederFull; // ifd_tnr_fp_blend_yuvnm1_1_4 + case 7357 : return GraphResolutionConfiguratorKernelRole::TnrFeederSmall; // ifd_tnr_sp_bc_yuv4nm1_1_4 + case 62054 : return GraphResolutionConfiguratorKernelRole::TnrFeederSmall; // ifd_tnr_sp_bc_rs4nm1_1_4 + case 23639 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_ims_1_2 + case 1502 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_bc_1_2 + case 2495 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_spatial_1_1 + case 20119 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_blend_1_1 + case 13101 : return GraphResolutionConfiguratorKernelRole::Smurf; // smurf_tnr_bc_1_0 + case 42749 : return GraphResolutionConfiguratorKernelRole::Smurf; // smurf_tnr_blend_1_0 + case 37468 : return GraphResolutionConfiguratorKernelRole::Smurf; // smurf_cas_1_0 + case 35263 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_bnlm_1_4 + case 9241 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_xnr_1_4 + case 51914 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_acm_1_4 + case 47873 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_tnr_bc_1_4 + case 14619 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_tnr_blend_1_4 + case 20893 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_cas_1_4 + + default: return GraphResolutionConfiguratorKernelRole::None; + } +} + +uint32_t GraphResolutionConfiguratorHelper::getReferenceKernel(uint32_t kernelUuid) +{ + switch (kernelUuid) + { + case 29996 : return 65466; // tnr_scaler_lb_1_1 from lbff_crop_espa_1_4 + case 20623 : return 65466; // tnr_scaler_fp_1_1 from lbff_crop_espa_1_4 + case 28787 : return 65466; // image_upscaler_1_1 from lbff_crop_espa_1_4 + case 50136 : return 9385; // b2i_ds_output_1_1 from cas_1_1 + case 65437 : return 20623; // odr_tnr_scale_fp_yuv4n_1_4 from tnr_scaler_fp_1_1 + case 30019 : return 54721; // xnr_5_4 from gltm_2_0 + case 17531 : return 36029; // acm_1_2 from glim_2_0 + case 1502 : return 23639; // tnr7_bc_1_2 from tnr7_ims_1_2 + case 20119 : return 16295; // tnr7_blend_1_1 from ifd_tnr_fp_blend_yuvnm1_1_4 + case 9385 : return 28787; // cas_1_1 from image_upscaler_1_1 + } + + return 0; +} + +FormatType GraphResolutionConfiguratorHelper::getFormatForDrainer(uint32_t kernelUuid) +{ + switch (kernelUuid) + { + case 16460 : return FormatType::YUV420_8_SP_P; // odr_ofs_mp_1_4 + case 37951 : return FormatType::YUV420_8_SP_P; // odr_ofs_dp_1_4 + case 63731 : return FormatType::META_8; // odr_tnr_sp_bc_rs4n_1_4 + case 5215 : return FormatType::YUV420_8_SP_P; // odr_tnr_fp_yuvn_1_4 HERE WE ASSUME NV12 OUTPUT! + case 65437 : return FormatType::YUV420_8_SP_P; // odr_tnr_scale_fp_yuv4n_1_4 + } + + return FormatType::YUV420_8_SP_P; +} + +StaticGraphStatus GraphResolutionConfiguratorHelper::getSmurfRunKernelUuid(std::vector>& kernelUuids) +{ + kernelUuids.clear(); + + std::pair smurfPair; + + smurfPair.first = 13101; // Smurf smurf_tnr_bc_1_0 + smurfPair.second = 1502; // Connected To tnr7_bc_1_2 + kernelUuids.push_back(smurfPair); + + smurfPair.first = 42749; // Smurf smurf_tnr_blend_1_0 + smurfPair.second = 20119; // Connected To tnr7_blend_1_1 + kernelUuids.push_back(smurfPair); + + smurfPair.first = 37468; // Smurf smurf_cas_1_0 + smurfPair.second = 9385; // Connected To cas_1_1 + kernelUuids.push_back(smurfPair); + + return StaticGraphStatus::SG_OK; +} + diff --git a/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.h new file mode 100644 index 0000000..725140f --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.h @@ -0,0 +1,46 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include +#include "Ipu8StaticGraphAutogen.h" +#include "Ipu8StaticGraphTypesAutogen.h" +#include "GraphResolutionConfigurator.h" + +class GraphResolutionConfiguratorHelper +{ +public: + + static uint32_t getRunKernelUuid(GraphResolutionConfiguratorKernelRole role); + static uint32_t getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, GraphLink** links); + static StaticGraphStatus getRunKernelUuidForResHistoryUpdate(std::vector& kernelUuids, uint32_t startUuid = 0); + static uint32_t getRunKernelIoBufferSystemApiUuid(); + static uint32_t getRunKernelDownscalerSystemApiUuid(); + static GraphResolutionConfiguratorKernelRole getKernelRole(uint32_t kernelUuid); + static uint32_t getReferenceKernel(uint32_t kernelUuid); + static FormatType getFormatForDrainer(uint32_t kernelUuid); + static StaticGraphStatus getSmurfRunKernelUuid(std::vector>& kernelUuids); +}; diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp new file mode 100644 index 0000000..0a209c5 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp @@ -0,0 +1,76723 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8StaticGraphAutogen.h" +#define CHECK_BITMAP128_BIT(bitmap, index) ((bitmap[(index)/64]) & ((uint64_t)1 << ((index) % 64))) + +/* + * External Interfaces + */ +IStaticGraphConfig::IStaticGraphConfig(SensorMode* selectedSensorMode, VirtualSinkMapping* sinkMappingConfiguration, int32_t graphId, int32_t settingsId) : +_selectedSensorMode(selectedSensorMode), _graphId(graphId), _settingsId(settingsId) +{ + memcpy(_sinkMappingConfiguration, sinkMappingConfiguration, sizeof(VirtualSinkMapping)); +} + +StaticGraphStatus IStaticGraphConfig::getSensorMode(SensorMode** sensorMode) +{ + if (!sensorMode) + { + STATIC_GRAPH_LOG("Sensor mode does not exist for this setting."); + return StaticGraphStatus::SG_OK; + } + *sensorMode = _selectedSensorMode; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getGraphTopology(GraphTopology** topology) +{ + *topology = _selectedGraphTopology; + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus IStaticGraphConfig::getGraphId(int32_t* graphId) +{ + if (graphId == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + *graphId = _graphId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getSettingsId(int32_t* settingsId) +{ + if (settingsId == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + *settingsId = _settingsId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getVirtualSinkConnection(VirtualSink& virtualSink, HwSink* hwSink) +{ + switch (virtualSink) + { + case VirtualSink::PreviewSink: + *hwSink = static_cast(_sinkMappingConfiguration->preview); + break; + case VirtualSink::VideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->video); + break; + case VirtualSink::PostProcessingVideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->postProcessingVideo); + break; + case VirtualSink::StillsSink: + *hwSink = static_cast(_sinkMappingConfiguration->stills); + break; + case VirtualSink::ThumbnailSink: + *hwSink = static_cast(_sinkMappingConfiguration->thumbnail); + break; + case VirtualSink::RawSink: + *hwSink = static_cast(_sinkMappingConfiguration->raw); + break; + case VirtualSink::RawPdafSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawPdaf); + break; + case VirtualSink::RawDolLongSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawDolLong); + break; + case VirtualSink::RawCvSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawCv); + break; + case VirtualSink::VideoIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->videoIr); + break; + case VirtualSink::PreviewIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->previewIr); + break; + default: + STATIC_GRAPH_LOG("Failed to get virtual sink mapping for virtual sink %d", static_cast(virtualSink)); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +GraphTopology::GraphTopology(GraphLink** links, int32_t numOfLinks, VirtualSinkMapping* sinkMappingConfiguration) : + links(links), numOfLinks(numOfLinks), _sinkMappingConfiguration(sinkMappingConfiguration) {} + +StaticGraphStatus GraphTopology::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + // Default impl. No inner nodes in the sub-graph nodes. + (void)subGraphInnerNodeConfiguration; + return StaticGraphStatus::SG_OK; +}; + +InnerNodeOptionsFlags GraphTopology::GetInnerOptions(SubGraphPublicInnerNodeConfiguration* publicInnerOptions) +{ + InnerNodeOptionsFlags res = None; + + if (publicInnerOptions) + { + res |= no3A & (publicInnerOptions->no3A ? -1 : 0); + res |= noMp & (publicInnerOptions->noMp ? -1 : 0); + res |= noDp & (publicInnerOptions->noDp ? -1 : 0); + res |= noPdaf & (publicInnerOptions->noPdaf ? -1 : 0); + } + + return res; +} + +bool GraphTopology::isLinkVanished(GraphLink* link) +{ + if (link == nullptr) + { + return false; + } + + switch(link->type) + { + case LinkType::Node2Self: + case LinkType::Node2Node: + { + if (link->srcNode == nullptr || link->destNode == nullptr) + { + return false; + } + + uint8_t srcTeb = link->srcTerminalId / 32; + uint8_t srcTebIndex = link->srcTerminalId % 32; + uint8_t destTeb = link->destTerminalId / 32; + uint8_t destTebIndex = link->destTerminalId % 32; + + if (((link->srcNode->bitmaps.teb[srcTeb] & (1 << srcTebIndex)) == 0) && + ((link->destNode->bitmaps.teb[destTeb] & (1 << destTebIndex)) == 0)) + { + return true; + } + + return false; + } + case LinkType::Node2Sink: + { + if (link->srcNode == nullptr) + { + return false; + } + + uint8_t srcTeb = link->srcTerminalId / 32; + uint8_t srcTebIndex = link->srcTerminalId % 32; + + if ((link->srcNode->bitmaps.teb[srcTeb] & (1 << srcTebIndex)) == 0) + { + return true; + } + + return false; + } + case LinkType::Source2Node: + { + if (link->destNode == nullptr) + { + return false; + } + + uint8_t destTeb = link->destTerminalId / 32; + uint8_t destTebIndex = link->destTerminalId % 32; + + if ((link->destNode->bitmaps.teb[destTeb] & (1 << destTebIndex)) == 0) + { + return true; + } + + return false; + } + + } + + return false; +} + +/* + * Outer Nodes + */ + +void OuterNode::Init(uint8_t nodeResourceId, + NodeTypes nodeType, + uint32_t kernelCount, + uint32_t operationMode, + uint32_t streamId, + uint8_t nodeNumberOfFragments) +{ + resourceId = nodeResourceId; + type = nodeType; + nodeKernels.kernelCount = kernelCount; + numberOfFragments = nodeNumberOfFragments; + if (kernelCount > 0) + { + nodeKernels.kernelList = new StaticGraphPacRunKernel[kernelCount]; + for (uint32_t j = 0; j < kernelCount; j++) + { + nodeKernels.kernelList[j].fragment_descs = nullptr; + } + + kernelListInConfigOrder = new uint16_t[kernelCount]; + } + else + { + nodeKernels.kernelList = nullptr; + } + for (uint32_t i = 0; i < 4; ++i) + { + fragmentVanishStatus[i] = VanishOption::Full; + } + + nodeKernels.operationMode = operationMode; + nodeKernels.streamId = streamId; +} +OuterNode::~OuterNode() +{ + delete[] nodeKernels.kernelList; + delete[] kernelListInConfigOrder; +} +void OuterNode::InitRunKernels(uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], StaticGraphKernelRes* resolutionInfos, uint64_t kernelsResolutionHistoryGroupBitmap[2], uint64_t fragmentDescriptorsGroupBitmap[2], StaticGraphKernelRes* resolutionHistories, StaticGraphKernelBppConfiguration* bppInfos, uint8_t* systemApisSizes, uint8_t* systemApiData, KernelFragments* fragmentDescriptors, uint16_t* runKernelConfigOrder) +{ + uint8_t* systemApiDataCurrentPtr = systemApiData; + uint32_t currentResolutionHistoryIndex = 0; + uint32_t currentRcbIndex = 0; + int32_t currentFragmentsDescriptorIndex = -1; + + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) + { + auto& runKernel = nodeKernels.kernelList[i].run_kernel; + runKernel.kernel_uuid = kernelsUuids[i]; + runKernel.stream_id = nodeKernels.streamId; + runKernel.enable = 1; + runKernel.output_count = 1; + if (CHECK_BITMAP128_BIT(kernelsRcbBitmap, i)) + { + // RCB + runKernel.resolution_info = &resolutionInfos[currentRcbIndex]; + currentRcbIndex++; + } + else + { + runKernel.resolution_info = nullptr; + } + + if (CHECK_BITMAP128_BIT(kernelsResolutionHistoryGroupBitmap, i)) + { + // Next resolution history group + currentResolutionHistoryIndex++; + } + runKernel.resolution_history = &resolutionHistories[currentResolutionHistoryIndex]; + + runKernel.bpp_info.input_bpp = bppInfos[i].input_bpp; + runKernel.bpp_info.output_bpp = bppInfos[i].output_bpp; + + // system API + uint32_t systemApiSize = systemApisSizes[i]; + runKernel.system_api.size = systemApiSize; + runKernel.system_api.data = systemApiSize != 0 ? systemApiDataCurrentPtr : nullptr; + + if (systemApiDataCurrentPtr) + { + systemApiDataCurrentPtr = systemApiDataCurrentPtr + systemApiSize; + } + + // Metadata + runKernel.metadata[0] = 0; + runKernel.metadata[1] = 0; + runKernel.metadata[2] = 0; + runKernel.metadata[3] = 0; + + // Init fragments information + if (CHECK_BITMAP128_BIT(fragmentDescriptorsGroupBitmap, i)) + { + // New group + currentFragmentsDescriptorIndex++; + } + + nodeKernels.kernelList[i].fragment_descs = &fragmentDescriptors[currentFragmentsDescriptorIndex].fragmentDescriptors[0]; + nodeKernels.kernelList[i].fragments_defined = (numberOfFragments > 0); + + kernelListInConfigOrder[i] = runKernelConfigOrder[i]; + } +} + +void OuterNode::SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]) +{ + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) + { + // check the i'th bit in the bitmap + if (CHECK_BITMAP128_BIT(disabledRunKernelsBitmap, i)) + { + nodeKernels.kernelList[i].run_kernel.enable = 2; // disabled + } + } +} + +uint8_t OuterNode::GetNumberOfFragments() +{ + return numberOfFragments; +} +void OuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Default implementation + (void)vanishStatus; +} + +const uint16_t* OuterNode::getRunKernelConfigOrder() +{ + return kernelListInConfigOrder; +} + +void IsysOuterNode::Init(IsysOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { is_odr_a[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{is_odr_a}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{is_odr_a}[0] } + uint8_t systemApisSizes[1] = {0 /*is_odr_a*/}; + uint16_t runKernelConfigOrder[1] = {0 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::Init(LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 34, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[34] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3F3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19] } + uint8_t systemApisSizes[34] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[34] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::Init(LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FFDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3FF3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23] } + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[38] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_gmv_1_4*/, 35 /*gmv_statistics_1_1*/, 36 /*odr_gmv_feature_1_4*/, 37 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwGdcOuterNode::Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(4, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {5637 /*gdc7_1*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { gdc7_1[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{gdc7_1}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{gdc7_1}[0] } + uint8_t systemApisSizes[1] = {0 /*gdc7_1*/}; + uint16_t runKernelConfigOrder[1] = {0 /*gdc7_1*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::Init(LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_tnr_sp_bc_yuv4nm1_1_4[31], ifd_tnr_sp_bc_rs4nm1_1_4[32], odr_tnr_sp_bc_rs4n_1_4[35], ifd_tnr_fp_blend_yuvnm1_1_4[36], odr_tnr_fp_yuvn_1_4[38], tnr_scaler_fp_1_1[39], image_upscaler_1_1[40], odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44], odr_tnr_scale_fp_yuv4n_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2}[19], {odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {tnr7_blend_1_1}[22], {odr_tnr_fp_yuvn_1_4}[23], {tnr_scaler_fp_1_1}[24], {image_upscaler_1_1}[25], {cas_1_1}[26], {odr_ofs_mp_1_4}[27], {b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 32 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 33 /*tnr7_ims_1_2*/, 34 /*tnr7_bc_1_2*/, 35 /*odr_tnr_sp_bc_rs4n_1_4*/, 36 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 37 /*tnr7_blend_1_1*/, 40 /*image_upscaler_1_1*/, 41 /*cas_1_1*/, 42 /*odr_ofs_mp_1_4*/, 43 /*b2i_ds_output_1_1*/, 44 /*odr_ofs_dp_1_4*/, 38 /*odr_tnr_fp_yuvn_1_4*/, 39 /*tnr_scaler_fp_1_1*/, 45 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::Init(LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_gmv_1_4[31], gmv_statistics_1_1[32], odr_gmv_feature_1_4[33], odr_gmv_match_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {gmv_statistics_1_1}[12], {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20], {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 33 /*odr_gmv_feature_1_4*/, 34 /*odr_gmv_match_1_4*/, 35 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 36 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 38 /*tnr7_bc_1_2*/, 39 /*odr_tnr_sp_bc_rs4n_1_4*/, 40 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysWithCvOuterNode::Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 4, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[4] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0xB, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xE, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xF, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + uint8_t systemApisSizes[4] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/}; + uint16_t runKernelConfigOrder[4] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void SwSegnetOuterNode::Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(3, NodeTypes::Sw, 0, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::Init(LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF77D63187FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], ifd_tnr_sp_bc_yuv4nm1_1_4[18], ifd_tnr_sp_bc_rs4nm1_1_4[19], ifd_tnr_fp_blend_yuvnm1_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], tnr_scaler_lb_1_1[40], gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EFEC738FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[23], {tnr7_ims_1_2}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_tnr_bc_1_4}[28], {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFFE738FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {tnr7_spatial_1_1}[28], {tnr_scaler_lb_1_1}[29], {tnr7_ims_1_2}[30], {gmv_statistics_1_1}[31], {odr_gmv_feature_1_4}[32], {odr_gmv_match_1_4}[33], {ifd_segmap_tnr_bc_1_4}[34], {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] } + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[62] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*tnr7_spatial_1_1*/, 40 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_gmv_1_4*/, 42 /*gmv_statistics_1_1*/, 43 /*odr_gmv_feature_1_4*/, 44 /*odr_gmv_match_1_4*/, 18 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 19 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 41 /*tnr7_ims_1_2*/, 47 /*tnr7_bc_1_2*/, 48 /*odr_tnr_sp_bc_rs4n_1_4*/, 20 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 51 /*tnr7_blend_1_1*/, 54 /*image_upscaler_1_1*/, 58 /*cas_1_1*/, 59 /*odr_ofs_mp_1_4*/, 60 /*b2i_ds_output_1_1*/, 61 /*odr_ofs_dp_1_4*/, 52 /*odr_tnr_fp_yuvn_1_4*/, 53 /*tnr_scaler_fp_1_1*/, 55 /*odr_tnr_scale_fp_yuv4n_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_tnr_bc_1_4*/, 49 /*ifd_segmap_tnr_blend_1_4*/, 56 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 46 /*smurf_tnr_bc_1_0*/, 50 /*smurf_tnr_blend_1_0*/, 57 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwScalerOuterNode::Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(5, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {19706 /*sw_scaler*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { sw_scaler[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{sw_scaler}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{sw_scaler}[0] } + uint8_t systemApisSizes[1] = {5 /*sw_scaler*/}; + uint16_t runKernelConfigOrder[1] = {0 /*sw_scaler*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void SwNntmOuterNode::Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(6, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {46539 /*nntm_1_0*/}; + uint64_t kernelsRcbBitmap[] = {0x0, 0x0}; // { } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{nntm_1_0}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{nntm_1_0}[0] } + uint8_t systemApisSizes[1] = {5 /*nntm_1_0*/}; + uint16_t runKernelConfigOrder[1] = {0 /*nntm_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, nullptr, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::Init(LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 58, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[58] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF76B18C3FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], tnr_scaler_lb_1_1[39], ifd_segmap_tnr_bc_1_4[41], smurf_tnr_bc_1_0[42], odr_tnr_sp_bc_rs4n_1_4[44], ifd_segmap_tnr_blend_1_4[45], smurf_tnr_blend_1_0[46], odr_tnr_fp_yuvn_1_4[48], tnr_scaler_fp_1_1[49], image_upscaler_1_1[50], odr_tnr_scale_fp_yuv4n_1_4[51], ifd_segmap_cas_1_4[52], smurf_cas_1_0[53], odr_ofs_mp_1_4[55], b2i_ds_output_1_1[56], odr_ofs_dp_1_4[57] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EF639C7FF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], {ifd_tnr_sp_bc_rs4nm1_1_4}[10], {ifd_tnr_fp_blend_yuvnm1_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[22], {tnr7_ims_1_2}[23], {ifd_segmap_tnr_bc_1_4}[24], {smurf_tnr_bc_1_0}[25], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_segmap_tnr_blend_1_4}[27], {smurf_tnr_blend_1_0}[28], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF39C7FFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1}[27], {tnr_scaler_lb_1_1}[28], {tnr7_ims_1_2}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2}[32], {odr_tnr_sp_bc_rs4n_1_4}[33], {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1}[36], {odr_tnr_fp_yuvn_1_4}[37], {tnr_scaler_fp_1_1}[38], {image_upscaler_1_1}[39], {odr_tnr_scale_fp_yuv4n_1_4}[40], {ifd_segmap_cas_1_4}[41], {smurf_cas_1_0}[42], {cas_1_1}[43], {odr_ofs_mp_1_4}[44], {b2i_ds_output_1_1}[45], {odr_ofs_dp_1_4}[46] } + uint8_t systemApisSizes[58] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[58] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*tnr7_spatial_1_1*/, 39 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 18 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 40 /*tnr7_ims_1_2*/, 43 /*tnr7_bc_1_2*/, 44 /*odr_tnr_sp_bc_rs4n_1_4*/, 19 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 47 /*tnr7_blend_1_1*/, 50 /*image_upscaler_1_1*/, 54 /*cas_1_1*/, 55 /*odr_ofs_mp_1_4*/, 56 /*b2i_ds_output_1_1*/, 57 /*odr_ofs_dp_1_4*/, 48 /*odr_tnr_fp_yuvn_1_4*/, 49 /*tnr_scaler_fp_1_1*/, 51 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 41 /*ifd_segmap_tnr_bc_1_4*/, 45 /*ifd_segmap_tnr_blend_1_4*/, 52 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 42 /*smurf_tnr_bc_1_0*/, 46 /*smurf_tnr_blend_1_0*/, 53 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2WithCvOuterNode::Init(IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = {0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_b[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4] } + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_b*/}; + uint16_t runKernelConfigOrder[5] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/, 4 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF76B18C3FFFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EF639C7FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF39C7FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {ifd_segmap_tnr_bc_1_4}[34], {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] } + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[62] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 47 /*tnr7_bc_1_2*/, 48 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 51 /*tnr7_blend_1_1*/, 54 /*image_upscaler_1_1*/, 58 /*cas_1_1*/, 59 /*odr_ofs_mp_1_4*/, 60 /*b2i_ds_output_1_1*/, 61 /*odr_ofs_dp_1_4*/, 52 /*odr_tnr_fp_yuvn_1_4*/, 53 /*tnr_scaler_fp_1_1*/, 55 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_tnr_bc_1_4*/, 49 /*ifd_segmap_tnr_blend_1_4*/, 56 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 46 /*smurf_tnr_bc_1_0*/, 50 /*smurf_tnr_blend_1_0*/, 57 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithTnrWithSapOuterNode::Init(LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xBF77D63187FFFE31, 0x3}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x78EFEC738FFFF062, 0x2}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFE738FFFFE73, 0x3}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], {gmv_statistics_1_1}[35], {odr_gmv_feature_1_4}[36], {odr_gmv_match_1_4}[37], {ifd_segmap_tnr_bc_1_4}[38], {smurf_tnr_bc_1_0}[39], {tnr7_bc_1_2}[40], {odr_tnr_sp_bc_rs4n_1_4}[41], {ifd_segmap_tnr_blend_1_4}[42], {smurf_tnr_blend_1_0}[43], {tnr7_blend_1_1}[44], {odr_tnr_fp_yuvn_1_4}[45], {tnr_scaler_fp_1_1}[46], {image_upscaler_1_1}[47], {odr_tnr_scale_fp_yuv4n_1_4}[48], {ifd_segmap_cas_1_4}[49], {smurf_cas_1_0}[50], {cas_1_1}[51], {odr_ofs_mp_1_4}[52], {b2i_ds_output_1_1}[53], {odr_ofs_dp_1_4}[54] } + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[66] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_gmv_1_4*/, 46 /*gmv_statistics_1_1*/, 47 /*odr_gmv_feature_1_4*/, 48 /*odr_gmv_match_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 51 /*tnr7_bc_1_2*/, 52 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 55 /*tnr7_blend_1_1*/, 58 /*image_upscaler_1_1*/, 62 /*cas_1_1*/, 63 /*odr_ofs_mp_1_4*/, 64 /*b2i_ds_output_1_1*/, 65 /*odr_ofs_dp_1_4*/, 56 /*odr_tnr_fp_yuvn_1_4*/, 57 /*tnr_scaler_fp_1_1*/, 59 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 49 /*ifd_segmap_tnr_bc_1_4*/, 53 /*ifd_segmap_tnr_blend_1_4*/, 60 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 50 /*smurf_tnr_bc_1_0*/, 54 /*smurf_tnr_blend_1_0*/, 61 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFBB58C61FFF1F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13C77B1CE3FF83C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFF9CE3FFF3F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] } + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[61] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*tnr7_spatial_1_1*/, 42 /*tnr_scaler_lb_1_1*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 21 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 43 /*tnr7_ims_1_2*/, 46 /*tnr7_bc_1_2*/, 47 /*odr_tnr_sp_bc_rs4n_1_4*/, 22 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 50 /*tnr7_blend_1_1*/, 53 /*image_upscaler_1_1*/, 57 /*cas_1_1*/, 58 /*odr_ofs_mp_1_4*/, 59 /*b2i_ds_output_1_1*/, 60 /*odr_ofs_dp_1_4*/, 51 /*odr_tnr_fp_yuvn_1_4*/, 52 /*tnr_scaler_fp_1_1*/, 54 /*odr_tnr_scale_fp_yuv4n_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_tnr_bc_1_4*/, 48 /*ifd_segmap_tnr_blend_1_4*/, 55 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 45 /*smurf_tnr_bc_1_0*/, 49 /*smurf_tnr_blend_1_0*/, 56 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 63, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[63] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77EED63187FFFC71, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], ifd_segmap_tnr_bc_1_4[46], smurf_tnr_bc_1_0[47], odr_tnr_sp_bc_rs4n_1_4[49], ifd_segmap_tnr_blend_1_4[50], smurf_tnr_blend_1_0[51], odr_tnr_fp_yuvn_1_4[53], tnr_scaler_fp_1_1[54], image_upscaler_1_1[55], odr_tnr_scale_fp_yuv4n_1_4[56], ifd_segmap_cas_1_4[57], smurf_cas_1_0[58], odr_ofs_mp_1_4[60], b2i_ds_output_1_1[61], odr_ofs_dp_1_4[62] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F1DEC738FFFE0C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFE738FFFFCF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], {ifd_segmap_tnr_bc_1_4}[35], {smurf_tnr_bc_1_0}[36], {tnr7_bc_1_2}[37], {odr_tnr_sp_bc_rs4n_1_4}[38], {ifd_segmap_tnr_blend_1_4}[39], {smurf_tnr_blend_1_0}[40], {tnr7_blend_1_1}[41], {odr_tnr_fp_yuvn_1_4}[42], {tnr_scaler_fp_1_1}[43], {image_upscaler_1_1}[44], {odr_tnr_scale_fp_yuv4n_1_4}[45], {ifd_segmap_cas_1_4}[46], {smurf_cas_1_0}[47], {cas_1_1}[48], {odr_ofs_mp_1_4}[49], {b2i_ds_output_1_1}[50], {odr_ofs_dp_1_4}[51] } + uint8_t systemApisSizes[63] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[63] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 48 /*tnr7_bc_1_2*/, 49 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 52 /*tnr7_blend_1_1*/, 55 /*image_upscaler_1_1*/, 59 /*cas_1_1*/, 60 /*odr_ofs_mp_1_4*/, 61 /*b2i_ds_output_1_1*/, 62 /*odr_ofs_dp_1_4*/, 53 /*odr_tnr_fp_yuvn_1_4*/, 54 /*tnr_scaler_fp_1_1*/, 56 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 46 /*ifd_segmap_tnr_bc_1_4*/, 50 /*ifd_segmap_tnr_blend_1_4*/, 57 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 47 /*smurf_tnr_bc_1_0*/, 51 /*smurf_tnr_blend_1_0*/, 58 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2OuterNode::Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_b[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_b*/}; + uint16_t runKernelConfigOrder[2] = {0 /*is_odr_a*/, 1 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FFDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3FF3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23] } + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/}; + uint16_t runKernelConfigOrder[38] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_pdaf_1_4*/, 35 /*pext_1_0*/, 36 /*pafstatistics_1_2*/, 37 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FFFDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37], ifd_gmv_1_4[38], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3FFF3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23], {ifd_gmv_1_4}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27] } + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[42] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_pdaf_1_4*/, 35 /*pext_1_0*/, 36 /*pafstatistics_1_2*/, 37 /*odr_pdaf_1_4*/, 38 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_pdaf_1_4*/, 32 /*pext_1_0*/, 33 /*pafstatistics_1_2*/, 34 /*odr_pdaf_1_4*/, 35 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 36 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 38 /*tnr7_bc_1_2*/, 39 /*odr_tnr_sp_bc_rs4n_1_4*/, 40 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FFFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], ifd_gmv_1_4[35], gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FFFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_gmv_1_4}[21], {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], {ifd_tnr_sp_bc_yuv4nm1_1_4}[25], {ifd_tnr_sp_bc_rs4nm1_1_4}[26], {tnr7_ims_1_2, tnr7_bc_1_2}[27], {odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_tnr_fp_blend_yuvnm1_1_4}[29], {tnr7_blend_1_1}[30], {odr_tnr_fp_yuvn_1_4}[31], {tnr_scaler_fp_1_1}[32], {image_upscaler_1_1}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38] } + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[54] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_pdaf_1_4*/, 32 /*pext_1_0*/, 33 /*pafstatistics_1_2*/, 34 /*odr_pdaf_1_4*/, 35 /*ifd_gmv_1_4*/, 36 /*gmv_statistics_1_1*/, 37 /*odr_gmv_feature_1_4*/, 38 /*odr_gmv_match_1_4*/, 39 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 40 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 41 /*tnr7_ims_1_2*/, 42 /*tnr7_bc_1_2*/, 43 /*odr_tnr_sp_bc_rs4n_1_4*/, 44 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 45 /*tnr7_blend_1_1*/, 48 /*image_upscaler_1_1*/, 49 /*cas_1_1*/, 50 /*odr_ofs_mp_1_4*/, 51 /*b2i_ds_output_1_1*/, 52 /*odr_ofs_dp_1_4*/, 46 /*odr_tnr_fp_yuvn_1_4*/, 47 /*tnr_scaler_fp_1_1*/, 53 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xBF77D63187FFFE31, 0x3}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x78EFEC738FFFF062, 0x2}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFE738FFFFE73, 0x3}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], {gmv_statistics_1_1}[35], {odr_gmv_feature_1_4}[36], {odr_gmv_match_1_4}[37], {ifd_segmap_tnr_bc_1_4}[38], {smurf_tnr_bc_1_0}[39], {tnr7_bc_1_2}[40], {odr_tnr_sp_bc_rs4n_1_4}[41], {ifd_segmap_tnr_blend_1_4}[42], {smurf_tnr_blend_1_0}[43], {tnr7_blend_1_1}[44], {odr_tnr_fp_yuvn_1_4}[45], {tnr_scaler_fp_1_1}[46], {image_upscaler_1_1}[47], {odr_tnr_scale_fp_yuv4n_1_4}[48], {ifd_segmap_cas_1_4}[49], {smurf_cas_1_0}[50], {cas_1_1}[51], {odr_ofs_mp_1_4}[52], {b2i_ds_output_1_1}[53], {odr_ofs_dp_1_4}[54] } + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[66] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_gmv_1_4*/, 46 /*gmv_statistics_1_1*/, 47 /*odr_gmv_feature_1_4*/, 48 /*odr_gmv_match_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 51 /*tnr7_bc_1_2*/, 52 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 55 /*tnr7_blend_1_1*/, 58 /*image_upscaler_1_1*/, 62 /*cas_1_1*/, 63 /*odr_ofs_mp_1_4*/, 64 /*b2i_ds_output_1_1*/, 65 /*odr_ofs_dp_1_4*/, 56 /*odr_tnr_fp_yuvn_1_4*/, 57 /*tnr_scaler_fp_1_1*/, 59 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 49 /*ifd_segmap_tnr_bc_1_4*/, 53 /*ifd_segmap_tnr_blend_1_4*/, 60 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 50 /*smurf_tnr_bc_1_0*/, 54 /*smurf_tnr_blend_1_0*/, 61 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FEFC001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], image_upscaler_1_1[27], odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], odr_ofs_dp_1_4[31], odr_awb_std_1_4[32], odr_awb_sat_1_4[33], aestatistics_2_1[34], odr_ae_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1F9C0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], {odr_af_std_1_4}[22] } + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[37] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*image_upscaler_1_1*/, 28 /*cas_1_1*/, 29 /*odr_ofs_mp_1_4*/, 30 /*b2i_ds_output_1_1*/, 31 /*odr_ofs_dp_1_4*/, 22 /*rgbs_grid_1_1*/, 32 /*odr_awb_std_1_4*/, 33 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 34 /*aestatistics_2_1*/, 35 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FFEFC001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], image_upscaler_1_1[27], odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], odr_ofs_dp_1_4[31], odr_awb_std_1_4[32], odr_awb_sat_1_4[33], aestatistics_2_1[34], odr_ae_1_4[35], odr_af_std_1_4[36], ifd_gmv_1_4[37], gmv_statistics_1_1[38], odr_gmv_feature_1_4[39], odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1FF9C0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[41] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*image_upscaler_1_1*/, 28 /*cas_1_1*/, 29 /*odr_ofs_mp_1_4*/, 30 /*b2i_ds_output_1_1*/, 31 /*odr_ofs_dp_1_4*/, 22 /*rgbs_grid_1_1*/, 32 /*odr_awb_std_1_4*/, 33 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 34 /*aestatistics_2_1*/, 35 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/, 37 /*ifd_gmv_1_4*/, 38 /*gmv_statistics_1_1*/, 39 /*odr_gmv_feature_1_4*/, 40 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFF7C001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FEC0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*tnr7_spatial_1_1*/, 28 /*tnr_scaler_lb_1_1*/, 22 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 35 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 36 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 39 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 40 /*tnr7_blend_1_1*/, 43 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 41 /*odr_tnr_fp_yuvn_1_4*/, 42 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFFF7C001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FFEC0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[53] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*tnr7_spatial_1_1*/, 28 /*tnr_scaler_lb_1_1*/, 22 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_gmv_1_4*/, 35 /*gmv_statistics_1_1*/, 36 /*odr_gmv_feature_1_4*/, 37 /*odr_gmv_match_1_4*/, 38 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 39 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 40 /*tnr7_ims_1_2*/, 41 /*tnr7_bc_1_2*/, 42 /*odr_tnr_sp_bc_rs4n_1_4*/, 43 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 44 /*tnr7_blend_1_1*/, 47 /*image_upscaler_1_1*/, 48 /*cas_1_1*/, 49 /*odr_ofs_mp_1_4*/, 50 /*b2i_ds_output_1_1*/, 51 /*odr_ofs_dp_1_4*/, 45 /*odr_tnr_fp_yuvn_1_4*/, 46 /*tnr_scaler_fp_1_1*/, 52 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xDFBBEB18C3FFF1F1, 0x1}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], gmv_statistics_1_1[45], odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], ifd_segmap_tnr_bc_1_4[48], smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], ifd_segmap_tnr_blend_1_4[52], smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], tnr_scaler_fp_1_1[56], image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], ifd_segmap_cas_1_4[59], smurf_cas_1_0[60], odr_ofs_mp_1_4[62], b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3C77F639C7FF83C2, 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFF39C7FFF3F3, 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {gmv_statistics_1_1}[34], {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], {ifd_segmap_tnr_bc_1_4}[37], {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], {odr_tnr_sp_bc_rs4n_1_4}[40], {ifd_segmap_tnr_blend_1_4}[41], {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], {odr_tnr_fp_yuvn_1_4}[44], {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] } + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[65] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 45 /*gmv_statistics_1_1*/, 46 /*odr_gmv_feature_1_4*/, 47 /*odr_gmv_match_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 50 /*tnr7_bc_1_2*/, 51 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 54 /*tnr7_blend_1_1*/, 57 /*image_upscaler_1_1*/, 61 /*cas_1_1*/, 62 /*odr_ofs_mp_1_4*/, 63 /*b2i_ds_output_1_1*/, 64 /*odr_ofs_dp_1_4*/, 55 /*odr_tnr_fp_yuvn_1_4*/, 56 /*tnr_scaler_fp_1_1*/, 58 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 48 /*ifd_segmap_tnr_bc_1_4*/, 52 /*ifd_segmap_tnr_blend_1_4*/, 59 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 49 /*smurf_tnr_bc_1_0*/, 53 /*smurf_tnr_blend_1_0*/, 60 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolOuterNode::Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_c[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_c*/}; + uint16_t runKernelConfigOrder[2] = {0 /*is_odr_a*/, 1 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::Init(LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EF0007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], image_upscaler_1_1[31], odr_ofs_mp_1_4[33], b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x19C000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], {odr_af_std_1_4}[21] } + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[37] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*image_upscaler_1_1*/, 32 /*cas_1_1*/, 33 /*odr_ofs_mp_1_4*/, 34 /*b2i_ds_output_1_1*/, 35 /*odr_ofs_dp_1_4*/, 28 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::Init(LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FEF0007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], image_upscaler_1_1[31], odr_ofs_mp_1_4[33], b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36], ifd_gmv_1_4[37], gmv_statistics_1_1[38], odr_gmv_feature_1_4[39], odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1F9C000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[41] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*image_upscaler_1_1*/, 32 /*cas_1_1*/, 33 /*odr_ofs_mp_1_4*/, 34 /*b2i_ds_output_1_1*/, 35 /*odr_ofs_dp_1_4*/, 28 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/, 37 /*ifd_gmv_1_4*/, 38 /*gmv_statistics_1_1*/, 39 /*odr_gmv_feature_1_4*/, 40 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::Init(LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECF70007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919EC000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], {odr_af_std_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2}[21], {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*tnr7_spatial_1_1*/, 32 /*tnr_scaler_lb_1_1*/, 28 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 35 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 36 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 39 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 40 /*tnr7_blend_1_1*/, 43 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 41 /*odr_tnr_fp_yuvn_1_4*/, 42 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::Init(LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFF70007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FEC000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[53] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*tnr7_spatial_1_1*/, 32 /*tnr_scaler_lb_1_1*/, 28 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_gmv_1_4*/, 35 /*gmv_statistics_1_1*/, 36 /*odr_gmv_feature_1_4*/, 37 /*odr_gmv_match_1_4*/, 38 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 39 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 40 /*tnr7_ims_1_2*/, 41 /*tnr7_bc_1_2*/, 42 /*odr_tnr_sp_bc_rs4n_1_4*/, 43 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 44 /*tnr7_blend_1_1*/, 47 /*image_upscaler_1_1*/, 48 /*cas_1_1*/, 49 /*odr_ofs_mp_1_4*/, 50 /*b2i_ds_output_1_1*/, 51 /*odr_ofs_dp_1_4*/, 45 /*odr_tnr_fp_yuvn_1_4*/, 46 /*tnr_scaler_fp_1_1*/, 52 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDolSmoothOuterNode::Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 8, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[8] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 53535 /*odr_bnlm_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x81, 0x0}; // { ifd_pipe_1_4[0], odr_bnlm_1_4[7] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, odr_bnlm_1_4}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x83, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4}[1], {odr_bnlm_1_4}[2] } + uint8_t systemApisSizes[8] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 220 /*odr_bnlm_1_4*/}; + uint16_t runKernelConfigOrder[8] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*gd_2_2*/, 5 /*wb_1_1*/, 6 /*bnlm_3_4*/, 7 /*odr_bnlm_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[6].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::Init(LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], image_upscaler_1_1[32], odr_ofs_mp_1_4[34], b2i_ds_output_1_1[35], odr_ofs_dp_1_4[36], odr_af_std_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x338001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22] } + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[38] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*image_upscaler_1_1*/, 33 /*cas_1_1*/, 34 /*odr_ofs_mp_1_4*/, 35 /*b2i_ds_output_1_1*/, 36 /*odr_ofs_dp_1_4*/, 29 /*fr_grid_1_0*/, 37 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::Init(LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FDE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], image_upscaler_1_1[32], odr_ofs_mp_1_4[34], b2i_ds_output_1_1[35], odr_ofs_dp_1_4[36], odr_af_std_1_4[37], ifd_gmv_1_4[38], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3F38001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], {odr_gmv_feature_1_4}[18], {odr_gmv_match_1_4}[19] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[42] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*image_upscaler_1_1*/, 33 /*cas_1_1*/, 34 /*odr_ofs_mp_1_4*/, 35 /*b2i_ds_output_1_1*/, 36 /*odr_ofs_dp_1_4*/, 29 /*fr_grid_1_0*/, 37 /*odr_af_std_1_4*/, 38 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::Init(LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9EE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233D8001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], {odr_af_std_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[18], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], {odr_tnr_scale_fp_yuv4n_1_4}[21] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*tnr7_spatial_1_1*/, 33 /*tnr_scaler_lb_1_1*/, 29 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 36 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 38 /*tnr7_bc_1_2*/, 39 /*odr_tnr_sp_bc_rs4n_1_4*/, 40 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::Init(LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FEE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_gmv_1_4[35], gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FD8001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], {odr_af_std_1_4}[13], {ifd_gmv_1_4}[14], {gmv_statistics_1_1}[15], {odr_gmv_feature_1_4}[16], {odr_gmv_match_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[22], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[23], {odr_ofs_dp_1_4}[24], {odr_tnr_scale_fp_yuv4n_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[54] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*tnr7_spatial_1_1*/, 33 /*tnr_scaler_lb_1_1*/, 29 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_gmv_1_4*/, 36 /*gmv_statistics_1_1*/, 37 /*odr_gmv_feature_1_4*/, 38 /*odr_gmv_match_1_4*/, 39 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 40 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 41 /*tnr7_ims_1_2*/, 42 /*tnr7_bc_1_2*/, 43 /*odr_tnr_sp_bc_rs4n_1_4*/, 44 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 45 /*tnr7_blend_1_1*/, 48 /*image_upscaler_1_1*/, 49 /*cas_1_1*/, 50 /*odr_ofs_mp_1_4*/, 51 /*b2i_ds_output_1_1*/, 52 /*odr_ofs_dp_1_4*/, 46 /*odr_tnr_fp_yuvn_1_4*/, 47 /*tnr_scaler_fp_1_1*/, 53 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::Init(LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 36, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[36] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xFDF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xF38000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21] } + uint8_t systemApisSizes[36] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[36] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*image_upscaler_1_1*/, 29 /*cas_1_1*/, 30 /*odr_ofs_mp_1_4*/, 31 /*b2i_ds_output_1_1*/, 32 /*odr_ofs_dp_1_4*/, 24 /*ccm_3a_2_0*/, 33 /*aestatistics_2_1*/, 34 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 35 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::Init(LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 32, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[32] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xFF7E0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], image_upscaler_1_1[22], odr_ofs_mp_1_4[24], b2i_ds_output_1_1[25], odr_ofs_dp_1_4[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xFCE0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFE001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18] } + uint8_t systemApisSizes[32] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[32] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*gd_2_2*/, 6 /*wb_1_1*/, 7 /*bnlm_3_4*/, 8 /*bxt_demosaic*/, 9 /*vcsc_2_0_b*/, 10 /*gltm_2_0*/, 11 /*xnr_5_4*/, 12 /*vcr_3_1*/, 13 /*glim_2_0*/, 14 /*acm_1_2*/, 15 /*gammatm_v4*/, 16 /*csc_1_1*/, 20 /*b2i_ds_1_1*/, 21 /*lbff_crop_espa_1_4*/, 22 /*image_upscaler_1_1*/, 23 /*cas_1_1*/, 24 /*odr_ofs_mp_1_4*/, 25 /*b2i_ds_output_1_1*/, 26 /*odr_ofs_dp_1_4*/, 17 /*rgbs_grid_1_1*/, 27 /*odr_awb_std_1_4*/, 28 /*odr_awb_sat_1_4*/, 18 /*ccm_3a_2_0*/, 29 /*aestatistics_2_1*/, 30 /*odr_ae_1_4*/, 19 /*fr_grid_1_0*/, 31 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::Init(LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 40, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[40] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xFFDF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35], ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xFF38000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + uint8_t systemApisSizes[40] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[40] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*image_upscaler_1_1*/, 29 /*cas_1_1*/, 30 /*odr_ofs_mp_1_4*/, 31 /*b2i_ds_output_1_1*/, 32 /*odr_ofs_dp_1_4*/, 24 /*ccm_3a_2_0*/, 33 /*aestatistics_2_1*/, 34 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 35 /*odr_af_std_1_4*/, 36 /*ifd_gmv_1_4*/, 37 /*gmv_statistics_1_1*/, 38 /*odr_gmv_feature_1_4*/, 39 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::Init(LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xF767EF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], ifd_tnr_sp_bc_yuv4nm1_1_4[33], ifd_tnr_sp_bc_rs4nm1_1_4[34], odr_tnr_sp_bc_rs4n_1_4[37], ifd_tnr_fp_blend_yuvnm1_1_4[38], odr_tnr_fp_yuvn_1_4[40], tnr_scaler_fp_1_1[41], image_upscaler_1_1[42], odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46], odr_tnr_scale_fp_yuv4n_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xC8CFD8000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFEFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2}[21], {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[48] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*tnr7_spatial_1_1*/, 29 /*tnr_scaler_lb_1_1*/, 24 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/, 33 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 34 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 35 /*tnr7_ims_1_2*/, 36 /*tnr7_bc_1_2*/, 37 /*odr_tnr_sp_bc_rs4n_1_4*/, 38 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 39 /*tnr7_blend_1_1*/, 42 /*image_upscaler_1_1*/, 43 /*cas_1_1*/, 44 /*odr_ofs_mp_1_4*/, 45 /*b2i_ds_output_1_1*/, 46 /*odr_ofs_dp_1_4*/, 40 /*odr_tnr_fp_yuvn_1_4*/, 41 /*tnr_scaler_fp_1_1*/, 47 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::Init(LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xF767FBE0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], tnr_scaler_lb_1_1[23], odr_awb_std_1_4[24], odr_awb_sat_1_4[25], aestatistics_2_1[26], odr_ae_1_4[27], odr_af_std_1_4[28], ifd_tnr_sp_bc_yuv4nm1_1_4[29], ifd_tnr_sp_bc_rs4nm1_1_4[30], odr_tnr_sp_bc_rs4n_1_4[33], ifd_tnr_fp_blend_yuvnm1_1_4[34], odr_tnr_fp_yuvn_1_4[36], tnr_scaler_fp_1_1[37], image_upscaler_1_1[38], odr_ofs_mp_1_4[40], b2i_ds_output_1_1[41], odr_ofs_dp_1_4[42], odr_tnr_scale_fp_yuv4n_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xC8CFF60001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFEFFFE001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, tnr7_bc_1_2}[18], {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[44] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*gd_2_2*/, 6 /*wb_1_1*/, 7 /*bnlm_3_4*/, 8 /*bxt_demosaic*/, 9 /*vcsc_2_0_b*/, 10 /*gltm_2_0*/, 11 /*xnr_5_4*/, 12 /*vcr_3_1*/, 13 /*glim_2_0*/, 14 /*acm_1_2*/, 15 /*gammatm_v4*/, 16 /*csc_1_1*/, 20 /*b2i_ds_1_1*/, 21 /*lbff_crop_espa_1_4*/, 22 /*tnr7_spatial_1_1*/, 23 /*tnr_scaler_lb_1_1*/, 17 /*rgbs_grid_1_1*/, 24 /*odr_awb_std_1_4*/, 25 /*odr_awb_sat_1_4*/, 18 /*ccm_3a_2_0*/, 26 /*aestatistics_2_1*/, 27 /*odr_ae_1_4*/, 19 /*fr_grid_1_0*/, 28 /*odr_af_std_1_4*/, 29 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 30 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 31 /*tnr7_ims_1_2*/, 32 /*tnr7_bc_1_2*/, 33 /*odr_tnr_sp_bc_rs4n_1_4*/, 34 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35 /*tnr7_blend_1_1*/, 38 /*image_upscaler_1_1*/, 39 /*cas_1_1*/, 40 /*odr_ofs_mp_1_4*/, 41 /*b2i_ds_output_1_1*/, 42 /*odr_ofs_dp_1_4*/, 36 /*odr_tnr_fp_yuvn_1_4*/, 37 /*tnr_scaler_fp_1_1*/, 43 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::Init(LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 52, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[52] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xF767FEF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], ifd_gmv_1_4[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36], ifd_tnr_sp_bc_yuv4nm1_1_4[37], ifd_tnr_sp_bc_rs4nm1_1_4[38], odr_tnr_sp_bc_rs4n_1_4[41], ifd_tnr_fp_blend_yuvnm1_1_4[42], odr_tnr_fp_yuvn_1_4[44], tnr_scaler_fp_1_1[45], image_upscaler_1_1[46], odr_ofs_mp_1_4[48], b2i_ds_output_1_1[49], odr_ofs_dp_1_4[50], odr_tnr_scale_fp_yuv4n_1_4[51] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xC8CFFD8000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFEFFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + uint8_t systemApisSizes[52] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[52] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*tnr7_spatial_1_1*/, 29 /*tnr_scaler_lb_1_1*/, 24 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/, 33 /*ifd_gmv_1_4*/, 34 /*gmv_statistics_1_1*/, 35 /*odr_gmv_feature_1_4*/, 36 /*odr_gmv_match_1_4*/, 37 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 38 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 39 /*tnr7_ims_1_2*/, 40 /*tnr7_bc_1_2*/, 41 /*odr_tnr_sp_bc_rs4n_1_4*/, 42 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 43 /*tnr7_blend_1_1*/, 46 /*image_upscaler_1_1*/, 47 /*cas_1_1*/, 48 /*odr_ofs_mp_1_4*/, 49 /*b2i_ds_output_1_1*/, 50 /*odr_ofs_dp_1_4*/, 44 /*odr_tnr_fp_yuvn_1_4*/, 45 /*tnr_scaler_fp_1_1*/, 51 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::Init(LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 33, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[33] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FEFC0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], image_upscaler_1_1[23], odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], odr_ofs_dp_1_4[27], odr_awb_std_1_4[28], odr_awb_sat_1_4[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1F9C0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18] } + uint8_t systemApisSizes[33] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[33] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*image_upscaler_1_1*/, 24 /*cas_1_1*/, 25 /*odr_ofs_mp_1_4*/, 26 /*b2i_ds_output_1_1*/, 27 /*odr_ofs_dp_1_4*/, 18 /*rgbs_grid_1_1*/, 28 /*odr_awb_std_1_4*/, 29 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::Init(LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FFEFC0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], image_upscaler_1_1[23], odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], odr_ofs_dp_1_4[27], odr_awb_std_1_4[28], odr_awb_sat_1_4[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], ifd_gmv_1_4[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1FF9C0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22] } + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[37] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*image_upscaler_1_1*/, 24 /*cas_1_1*/, 25 /*odr_ofs_mp_1_4*/, 26 /*b2i_ds_output_1_1*/, 27 /*odr_ofs_dp_1_4*/, 18 /*rgbs_grid_1_1*/, 28 /*odr_awb_std_1_4*/, 29 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/, 33 /*ifd_gmv_1_4*/, 34 /*gmv_statistics_1_1*/, 35 /*odr_gmv_feature_1_4*/, 36 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::Init(LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFF7C0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], odr_af_std_1_4[29], ifd_tnr_sp_bc_yuv4nm1_1_4[30], ifd_tnr_sp_bc_rs4nm1_1_4[31], odr_tnr_sp_bc_rs4n_1_4[34], ifd_tnr_fp_blend_yuvnm1_1_4[35], odr_tnr_fp_yuvn_1_4[37], tnr_scaler_fp_1_1[38], image_upscaler_1_1[39], odr_ofs_mp_1_4[41], b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43], odr_tnr_scale_fp_yuv4n_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FEC0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, tnr7_bc_1_2}[18], {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[45] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*tnr7_spatial_1_1*/, 24 /*tnr_scaler_lb_1_1*/, 18 /*rgbs_grid_1_1*/, 25 /*odr_awb_std_1_4*/, 26 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 27 /*aestatistics_2_1*/, 28 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 29 /*odr_af_std_1_4*/, 30 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 31 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 32 /*tnr7_ims_1_2*/, 33 /*tnr7_bc_1_2*/, 34 /*odr_tnr_sp_bc_rs4n_1_4*/, 35 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 36 /*tnr7_blend_1_1*/, 39 /*image_upscaler_1_1*/, 40 /*cas_1_1*/, 41 /*odr_ofs_mp_1_4*/, 42 /*b2i_ds_output_1_1*/, 43 /*odr_ofs_dp_1_4*/, 37 /*odr_tnr_fp_yuvn_1_4*/, 38 /*tnr_scaler_fp_1_1*/, 44 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::Init(LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFFF7C0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], odr_af_std_1_4[29], ifd_gmv_1_4[30], gmv_statistics_1_1[31], odr_gmv_feature_1_4[32], odr_gmv_match_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FFEC0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {gmv_statistics_1_1}[12], {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], {odr_gmv_feature_1_4}[18], {odr_gmv_match_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*tnr7_spatial_1_1*/, 24 /*tnr_scaler_lb_1_1*/, 18 /*rgbs_grid_1_1*/, 25 /*odr_awb_std_1_4*/, 26 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 27 /*aestatistics_2_1*/, 28 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 29 /*odr_af_std_1_4*/, 30 /*ifd_gmv_1_4*/, 31 /*gmv_statistics_1_1*/, 32 /*odr_gmv_feature_1_4*/, 33 /*odr_gmv_match_1_4*/, 34 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 35 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 36 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 39 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 40 /*tnr7_blend_1_1*/, 43 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 41 /*odr_tnr_fp_yuvn_1_4*/, 42 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 39, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[39] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7FFBF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x7FE70000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], {odr_pdaf_1_4}[24] } + uint8_t systemApisSizes[39] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/}; + uint16_t runKernelConfigOrder[39] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*image_upscaler_1_1*/, 26 /*cas_1_1*/, 27 /*odr_ofs_mp_1_4*/, 28 /*b2i_ds_output_1_1*/, 29 /*odr_ofs_dp_1_4*/, 20 /*rgbs_grid_1_1*/, 30 /*odr_awb_std_1_4*/, 31 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 32 /*aestatistics_2_1*/, 33 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_pdaf_1_4*/, 36 /*pext_1_0*/, 37 /*pafstatistics_1_2*/, 38 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 43, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[43] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7FFFBF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38], ifd_gmv_1_4[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x7FFE70000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], {odr_pdaf_1_4}[24], {ifd_gmv_1_4}[25], {gmv_statistics_1_1}[26], {odr_gmv_feature_1_4}[27], {odr_gmv_match_1_4}[28] } + uint8_t systemApisSizes[43] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[43] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*image_upscaler_1_1*/, 26 /*cas_1_1*/, 27 /*odr_ofs_mp_1_4*/, 28 /*b2i_ds_output_1_1*/, 29 /*odr_ofs_dp_1_4*/, 20 /*rgbs_grid_1_1*/, 30 /*odr_awb_std_1_4*/, 31 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 32 /*aestatistics_2_1*/, 33 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_pdaf_1_4*/, 36 /*pext_1_0*/, 37 /*pafstatistics_1_2*/, 38 /*odr_pdaf_1_4*/, 39 /*ifd_gmv_1_4*/, 40 /*gmv_statistics_1_1*/, 41 /*odr_gmv_feature_1_4*/, 42 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7BB3FFDF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], ifd_tnr_sp_bc_yuv4nm1_1_4[36], ifd_tnr_sp_bc_rs4nm1_1_4[37], odr_tnr_sp_bc_rs4n_1_4[40], ifd_tnr_fp_blend_yuvnm1_1_4[41], odr_tnr_fp_yuvn_1_4[43], tnr_scaler_fp_1_1[44], image_upscaler_1_1[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49], odr_tnr_scale_fp_yuv4n_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x6467FFB0000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF7FFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], {odr_pdaf_1_4}[21], {ifd_tnr_sp_bc_yuv4nm1_1_4}[22], {ifd_tnr_sp_bc_rs4nm1_1_4}[23], {tnr7_ims_1_2, tnr7_bc_1_2}[24], {odr_tnr_sp_bc_rs4n_1_4}[25], {ifd_tnr_fp_blend_yuvnm1_1_4}[26], {tnr7_blend_1_1}[27], {odr_tnr_fp_yuvn_1_4}[28], {tnr_scaler_fp_1_1}[29], {image_upscaler_1_1}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34], {odr_tnr_scale_fp_yuv4n_1_4}[35] } + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[51] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*tnr7_spatial_1_1*/, 26 /*tnr_scaler_lb_1_1*/, 20 /*rgbs_grid_1_1*/, 27 /*odr_awb_std_1_4*/, 28 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 29 /*aestatistics_2_1*/, 30 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 31 /*odr_af_std_1_4*/, 32 /*ifd_pdaf_1_4*/, 33 /*pext_1_0*/, 34 /*pafstatistics_1_2*/, 35 /*odr_pdaf_1_4*/, 36 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 37 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 38 /*tnr7_ims_1_2*/, 39 /*tnr7_bc_1_2*/, 40 /*odr_tnr_sp_bc_rs4n_1_4*/, 41 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 42 /*tnr7_blend_1_1*/, 45 /*image_upscaler_1_1*/, 46 /*cas_1_1*/, 47 /*odr_ofs_mp_1_4*/, 48 /*b2i_ds_output_1_1*/, 49 /*odr_ofs_dp_1_4*/, 43 /*odr_tnr_fp_yuvn_1_4*/, 44 /*tnr_scaler_fp_1_1*/, 50 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 55, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[55] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7BB3FFFDF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39], ifd_tnr_sp_bc_yuv4nm1_1_4[40], ifd_tnr_sp_bc_rs4nm1_1_4[41], odr_tnr_sp_bc_rs4n_1_4[44], ifd_tnr_fp_blend_yuvnm1_1_4[45], odr_tnr_fp_yuvn_1_4[47], tnr_scaler_fp_1_1[48], image_upscaler_1_1[49], odr_ofs_mp_1_4[51], b2i_ds_output_1_1[52], odr_ofs_dp_1_4[53], odr_tnr_scale_fp_yuv4n_1_4[54] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x6467FFFB0000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF7FFFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], {odr_pdaf_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_tnr_sp_bc_yuv4nm1_1_4}[26], {ifd_tnr_sp_bc_rs4nm1_1_4}[27], {tnr7_ims_1_2, tnr7_bc_1_2}[28], {odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_tnr_fp_blend_yuvnm1_1_4}[30], {tnr7_blend_1_1}[31], {odr_tnr_fp_yuvn_1_4}[32], {tnr_scaler_fp_1_1}[33], {image_upscaler_1_1}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], {b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38], {odr_tnr_scale_fp_yuv4n_1_4}[39] } + uint8_t systemApisSizes[55] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[55] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*tnr7_spatial_1_1*/, 26 /*tnr_scaler_lb_1_1*/, 20 /*rgbs_grid_1_1*/, 27 /*odr_awb_std_1_4*/, 28 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 29 /*aestatistics_2_1*/, 30 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 31 /*odr_af_std_1_4*/, 32 /*ifd_pdaf_1_4*/, 33 /*pext_1_0*/, 34 /*pafstatistics_1_2*/, 35 /*odr_pdaf_1_4*/, 36 /*ifd_gmv_1_4*/, 37 /*gmv_statistics_1_1*/, 38 /*odr_gmv_feature_1_4*/, 39 /*odr_gmv_match_1_4*/, 40 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 41 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 42 /*tnr7_ims_1_2*/, 43 /*tnr7_bc_1_2*/, 44 /*odr_tnr_sp_bc_rs4n_1_4*/, 45 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 46 /*tnr7_blend_1_1*/, 49 /*image_upscaler_1_1*/, 50 /*cas_1_1*/, 51 /*odr_ofs_mp_1_4*/, 52 /*b2i_ds_output_1_1*/, 53 /*odr_ofs_dp_1_4*/, 47 /*odr_tnr_fp_yuvn_1_4*/, 48 /*tnr_scaler_fp_1_1*/, 54 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 67, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[67] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7EEFAC630FFFFC71, 0x7}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_gmv_1_4[22], ifd_tnr_sp_bc_yuv4nm1_1_4[23], ifd_tnr_sp_bc_rs4nm1_1_4[24], ifd_tnr_fp_blend_yuvnm1_1_4[25], ifd_segmap_bnlm_1_4[26], smurf_bnlm_1_0[27], ifd_segmap_xnr_1_4[32], smurf_xnr_1_0[33], ifd_segmap_acm_1_4[37], smurf_acm_1_0[38], b2i_ds_1_1[42], lbff_crop_espa_1_4[43], tnr_scaler_lb_1_1[45], gmv_statistics_1_1[47], odr_gmv_feature_1_4[48], odr_gmv_match_1_4[49], ifd_segmap_tnr_bc_1_4[50], smurf_tnr_bc_1_0[51], odr_tnr_sp_bc_rs4n_1_4[53], ifd_segmap_tnr_blend_1_4[54], smurf_tnr_blend_1_0[55], odr_tnr_fp_yuvn_1_4[57], tnr_scaler_fp_1_1[58], image_upscaler_1_1[59], odr_tnr_scale_fp_yuv4n_1_4[60], ifd_segmap_cas_1_4[61], smurf_cas_1_0[62], odr_ofs_mp_1_4[64], b2i_ds_output_1_1[65], odr_ofs_dp_1_4[66] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xF1DFD8E71FFFE0C2, 0x4}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFCE71FFFFCF3, 0x7}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {ifd_segmap_bnlm_1_4}[22], {smurf_bnlm_1_0}[23], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[24], {ifd_segmap_xnr_1_4}[25], {smurf_xnr_1_0}[26], {xnr_5_4, vcr_3_1, glim_2_0}[27], {ifd_segmap_acm_1_4}[28], {smurf_acm_1_0}[29], {acm_1_2, gammatm_v4, csc_1_1}[30], {b2i_ds_1_1}[31], {lbff_crop_espa_1_4}[32], {tnr7_spatial_1_1}[33], {tnr_scaler_lb_1_1}[34], {tnr7_ims_1_2}[35], {gmv_statistics_1_1}[36], {odr_gmv_feature_1_4}[37], {odr_gmv_match_1_4}[38], {ifd_segmap_tnr_bc_1_4}[39], {smurf_tnr_bc_1_0}[40], {tnr7_bc_1_2}[41], {odr_tnr_sp_bc_rs4n_1_4}[42], {ifd_segmap_tnr_blend_1_4}[43], {smurf_tnr_blend_1_0}[44], {tnr7_blend_1_1}[45], {odr_tnr_fp_yuvn_1_4}[46], {tnr_scaler_fp_1_1}[47], {image_upscaler_1_1}[48], {odr_tnr_scale_fp_yuv4n_1_4}[49], {ifd_segmap_cas_1_4}[50], {smurf_cas_1_0}[51], {cas_1_1}[52], {odr_ofs_mp_1_4}[53], {b2i_ds_output_1_1}[54], {odr_ofs_dp_1_4}[55] } + uint8_t systemApisSizes[67] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[67] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 28 /*bnlm_3_4*/, 29 /*bxt_demosaic*/, 30 /*vcsc_2_0_b*/, 31 /*gltm_2_0*/, 34 /*xnr_5_4*/, 35 /*vcr_3_1*/, 36 /*glim_2_0*/, 39 /*acm_1_2*/, 40 /*gammatm_v4*/, 41 /*csc_1_1*/, 42 /*b2i_ds_1_1*/, 43 /*lbff_crop_espa_1_4*/, 44 /*tnr7_spatial_1_1*/, 45 /*tnr_scaler_lb_1_1*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_gmv_1_4*/, 47 /*gmv_statistics_1_1*/, 48 /*odr_gmv_feature_1_4*/, 49 /*odr_gmv_match_1_4*/, 23 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 24 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 46 /*tnr7_ims_1_2*/, 52 /*tnr7_bc_1_2*/, 53 /*odr_tnr_sp_bc_rs4n_1_4*/, 25 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 56 /*tnr7_blend_1_1*/, 59 /*image_upscaler_1_1*/, 63 /*cas_1_1*/, 64 /*odr_ofs_mp_1_4*/, 65 /*b2i_ds_output_1_1*/, 66 /*odr_ofs_dp_1_4*/, 57 /*odr_tnr_fp_yuvn_1_4*/, 58 /*tnr_scaler_fp_1_1*/, 60 /*odr_tnr_scale_fp_yuv4n_1_4*/, 26 /*ifd_segmap_bnlm_1_4*/, 32 /*ifd_segmap_xnr_1_4*/, 37 /*ifd_segmap_acm_1_4*/, 50 /*ifd_segmap_tnr_bc_1_4*/, 54 /*ifd_segmap_tnr_blend_1_4*/, 61 /*ifd_segmap_cas_1_4*/, 27 /*smurf_bnlm_1_0*/, 33 /*smurf_xnr_1_0*/, 38 /*smurf_acm_1_0*/, 51 /*smurf_tnr_bc_1_0*/, 55 /*smurf_tnr_blend_1_0*/, 62 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[28].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::Init(LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BE3187FE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_segmap_bnlm_1_4[17], smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], ifd_segmap_acm_1_4[28], smurf_acm_1_0[29], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], image_upscaler_1_1[35], ifd_segmap_cas_1_4[36], smurf_cas_1_0[37], odr_ofs_mp_1_4[39], b2i_ds_output_1_1[40], odr_ofs_dp_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27C738FF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_segmap_bnlm_1_4}[9], {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[11], {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], {xnr_5_4, vcr_3_1, glim_2_0}[14], {ifd_segmap_acm_1_4}[15], {smurf_acm_1_0}[16], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], {image_upscaler_1_1}[19], {ifd_segmap_cas_1_4}[20], {smurf_cas_1_0}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE738FFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {image_upscaler_1_1}[24], {ifd_segmap_cas_1_4}[25], {smurf_cas_1_0}[26], {cas_1_1}[27], {odr_ofs_mp_1_4}[28], {b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[42] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 25 /*xnr_5_4*/, 26 /*vcr_3_1*/, 27 /*glim_2_0*/, 30 /*acm_1_2*/, 31 /*gammatm_v4*/, 32 /*csc_1_1*/, 33 /*b2i_ds_1_1*/, 34 /*lbff_crop_espa_1_4*/, 35 /*image_upscaler_1_1*/, 38 /*cas_1_1*/, 39 /*odr_ofs_mp_1_4*/, 40 /*b2i_ds_output_1_1*/, 41 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_segmap_bnlm_1_4*/, 23 /*ifd_segmap_xnr_1_4*/, 28 /*ifd_segmap_acm_1_4*/, 36 /*ifd_segmap_cas_1_4*/, 18 /*smurf_bnlm_1_0*/, 24 /*smurf_xnr_1_0*/, 29 /*smurf_acm_1_0*/, 37 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::Init(LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BFC630FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], ifd_segmap_bnlm_1_4[18], smurf_bnlm_1_0[19], ifd_segmap_xnr_1_4[24], smurf_xnr_1_0[25], ifd_segmap_acm_1_4[29], smurf_acm_1_0[30], b2i_ds_1_1[34], lbff_crop_espa_1_4[35], image_upscaler_1_1[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27F8E71FF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_segmap_bnlm_1_4}[10], {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[12], {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], {xnr_5_4, vcr_3_1, glim_2_0}[15], {ifd_segmap_acm_1_4}[16], {smurf_acm_1_0}[17], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {image_upscaler_1_1}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFCE71FFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1}[22], {b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {image_upscaler_1_1}[25], {gmv_statistics_1_1}[26], {odr_gmv_feature_1_4}[27], {odr_gmv_match_1_4}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 20 /*bnlm_3_4*/, 21 /*bxt_demosaic*/, 22 /*vcsc_2_0_b*/, 23 /*gltm_2_0*/, 26 /*xnr_5_4*/, 27 /*vcr_3_1*/, 28 /*glim_2_0*/, 31 /*acm_1_2*/, 32 /*gammatm_v4*/, 33 /*csc_1_1*/, 34 /*b2i_ds_1_1*/, 35 /*lbff_crop_espa_1_4*/, 36 /*image_upscaler_1_1*/, 42 /*cas_1_1*/, 43 /*odr_ofs_mp_1_4*/, 44 /*b2i_ds_output_1_1*/, 45 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_gmv_1_4*/, 37 /*gmv_statistics_1_1*/, 38 /*odr_gmv_feature_1_4*/, 39 /*odr_gmv_match_1_4*/, 18 /*ifd_segmap_bnlm_1_4*/, 24 /*ifd_segmap_xnr_1_4*/, 29 /*ifd_segmap_acm_1_4*/, 40 /*ifd_segmap_cas_1_4*/, 19 /*smurf_bnlm_1_0*/, 25 /*smurf_xnr_1_0*/, 30 /*smurf_acm_1_0*/, 41 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[20].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrWithOpacityOuterNode::Init(LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DDDDFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_tnr_sp_bc_yuv4nm1_1_4[31], ifd_tnr_sp_bc_rs4nm1_1_4[32], ifd_tnr_fp_blend_yuvnm1_1_4[34], ifd_segmap_tnr_bc_1_4[35], smurf_tnr_bc_1_0[36], odr_tnr_sp_bc_rs4n_1_4[38], ifd_segmap_tnr_blend_1_4[39], smurf_tnr_blend_1_0[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x323BFFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_tnr_bc_1_4}[15], {smurf_tnr_bc_1_0}[16], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_segmap_tnr_blend_1_4}[18], {smurf_tnr_blend_1_0}[19], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[20], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[21], {odr_ofs_dp_1_4}[22], {odr_tnr_scale_fp_yuv4n_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_tnr_bc_1_4}[21], {smurf_tnr_bc_1_0}[22], {tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_segmap_tnr_blend_1_4}[25], {smurf_tnr_blend_1_0}[26], {tnr7_blend_1_1}[27], {odr_tnr_fp_yuvn_1_4}[28], {tnr_scaler_fp_1_1}[29], {image_upscaler_1_1}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34], {odr_tnr_scale_fp_yuv4n_1_4}[35] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 32 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 33 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 34 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/, 35 /*ifd_segmap_tnr_bc_1_4*/, 39 /*ifd_segmap_tnr_blend_1_4*/, 36 /*smurf_tnr_bc_1_0*/, 40 /*smurf_tnr_blend_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BE3187FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27C738FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE738FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 42 /*cas_1_1*/, 43 /*odr_ofs_mp_1_4*/, 44 /*b2i_ds_output_1_1*/, 45 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 40 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 41 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BFC630FFFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27F8E71FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFCE71FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], {gmv_statistics_1_1}[30], {odr_gmv_feature_1_4}[31], {odr_gmv_match_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], {b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*image_upscaler_1_1*/, 46 /*cas_1_1*/, 47 /*odr_ofs_mp_1_4*/, 48 /*b2i_ds_output_1_1*/, 49 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_gmv_1_4*/, 41 /*gmv_statistics_1_1*/, 42 /*odr_gmv_feature_1_4*/, 43 /*odr_gmv_match_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 45 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DF18C3FF1F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13E39C7F83C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FF39C7FF3F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] } + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[45] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*image_upscaler_1_1*/, 41 /*cas_1_1*/, 42 /*odr_ofs_mp_1_4*/, 43 /*b2i_ds_output_1_1*/, 44 /*odr_ofs_dp_1_4*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 39 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 40 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFE3187FF1F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42], ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13FC738FF83C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFE738FFF3F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 40 /*gmv_statistics_1_1*/, 41 /*odr_gmv_feature_1_4*/, 42 /*odr_gmv_match_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 43 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 44 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolWithCvOuterNode::Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_c[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_c}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_c}[4] } + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_c*/}; + uint16_t runKernelConfigOrder[5] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/, 4 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::Init(LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DF18C3C7FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13E39C78FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FF39C7CFFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32] } + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[45] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*image_upscaler_1_1*/, 41 /*cas_1_1*/, 42 /*odr_ofs_mp_1_4*/, 43 /*b2i_ds_output_1_1*/, 44 /*odr_ofs_dp_1_4*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 39 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 40 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::Init(LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFE3187C7FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42], ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13FC738F8FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFE738FCFFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 40 /*gmv_statistics_1_1*/, 41 /*odr_gmv_feature_1_4*/, 42 /*odr_gmv_match_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 43 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 44 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::Init(LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFBB58C61FC7FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13C77B1CE3F8FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFF9CE3FCFFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {tnr7_spatial_1_1}[29], {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], {odr_tnr_sp_bc_rs4n_1_4}[35], {ifd_segmap_tnr_blend_1_4}[36], {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], {odr_tnr_fp_yuvn_1_4}[39], {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] } + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[61] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*tnr7_spatial_1_1*/, 42 /*tnr_scaler_lb_1_1*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 21 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 43 /*tnr7_ims_1_2*/, 46 /*tnr7_bc_1_2*/, 47 /*odr_tnr_sp_bc_rs4n_1_4*/, 22 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 50 /*tnr7_blend_1_1*/, 53 /*image_upscaler_1_1*/, 57 /*cas_1_1*/, 58 /*odr_ofs_mp_1_4*/, 59 /*b2i_ds_output_1_1*/, 60 /*odr_ofs_dp_1_4*/, 51 /*odr_tnr_fp_yuvn_1_4*/, 52 /*tnr_scaler_fp_1_1*/, 54 /*odr_tnr_scale_fp_yuv4n_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_tnr_bc_1_4*/, 48 /*ifd_segmap_tnr_blend_1_4*/, 55 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 45 /*smurf_tnr_bc_1_0*/, 49 /*smurf_tnr_blend_1_0*/, 56 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::Init(LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xDFBBEB18C3FC7FC3, 0x1}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], gmv_statistics_1_1[45], odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], ifd_segmap_tnr_bc_1_4[48], smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], ifd_segmap_tnr_blend_1_4[52], smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], tnr_scaler_fp_1_1[56], image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], ifd_segmap_cas_1_4[59], smurf_cas_1_0[60], odr_ofs_mp_1_4[62], b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3C77F639C7F8FE06, 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFF39C7FCFFC7, 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {gmv_statistics_1_1}[33], {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], {ifd_segmap_tnr_bc_1_4}[36], {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], {odr_tnr_sp_bc_rs4n_1_4}[39], {ifd_segmap_tnr_blend_1_4}[40], {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], {odr_tnr_fp_yuvn_1_4}[43], {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] } + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[65] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 45 /*gmv_statistics_1_1*/, 46 /*odr_gmv_feature_1_4*/, 47 /*odr_gmv_match_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 50 /*tnr7_bc_1_2*/, 51 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 54 /*tnr7_blend_1_1*/, 57 /*image_upscaler_1_1*/, 61 /*cas_1_1*/, 62 /*odr_ofs_mp_1_4*/, 63 /*b2i_ds_output_1_1*/, 64 /*odr_ofs_dp_1_4*/, 55 /*odr_tnr_fp_yuvn_1_4*/, 56 /*tnr_scaler_fp_1_1*/, 58 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 48 /*ifd_segmap_tnr_bc_1_4*/, 52 /*ifd_segmap_tnr_blend_1_4*/, 59 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 49 /*smurf_tnr_bc_1_0*/, 53 /*smurf_tnr_blend_1_0*/, 60 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::Init(LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BE31878FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27C738F1FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {ifd_segmap_cas_1_4}[23], {smurf_cas_1_0}[24], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[25], {odr_ofs_dp_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE738F9FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 42 /*cas_1_1*/, 43 /*odr_ofs_mp_1_4*/, 44 /*b2i_ds_output_1_1*/, 45 /*odr_ofs_dp_1_4*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 40 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 41 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::Init(LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BFC630F8FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27F8E71F1FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {image_upscaler_1_1}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFCE71F9FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*image_upscaler_1_1*/, 46 /*cas_1_1*/, 47 /*odr_ofs_mp_1_4*/, 48 /*b2i_ds_output_1_1*/, 49 /*odr_ofs_dp_1_4*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_gmv_1_4*/, 41 /*gmv_statistics_1_1*/, 42 /*odr_gmv_feature_1_4*/, 43 /*odr_gmv_match_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 45 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::Init(LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF76B18C3F8FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EF639C7F1FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {ifd_segmap_tnr_bc_1_4}[27], {smurf_tnr_bc_1_0}[28], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_segmap_tnr_blend_1_4}[30], {smurf_tnr_blend_1_0}[31], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33], {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF39C7F9FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] } + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[62] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 47 /*tnr7_bc_1_2*/, 48 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 51 /*tnr7_blend_1_1*/, 54 /*image_upscaler_1_1*/, 58 /*cas_1_1*/, 59 /*odr_ofs_mp_1_4*/, 60 /*b2i_ds_output_1_1*/, 61 /*odr_ofs_dp_1_4*/, 52 /*odr_tnr_fp_yuvn_1_4*/, 53 /*tnr_scaler_fp_1_1*/, 55 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_tnr_bc_1_4*/, 49 /*ifd_segmap_tnr_blend_1_4*/, 56 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 46 /*smurf_tnr_bc_1_0*/, 50 /*smurf_tnr_blend_1_0*/, 57 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::Init(LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xBF77D63187F8FF87, 0x3}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x78EFEC738FF1FC0E, 0x2}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_tnr_bc_1_4}[31], {smurf_tnr_bc_1_0}[32], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[33], {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37], {ifd_segmap_cas_1_4}[38], {smurf_cas_1_0}[39], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[40], {odr_ofs_dp_1_4}[41] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFE738FF9FF8F, 0x3}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {gmv_statistics_1_1}[34], {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], {ifd_segmap_tnr_bc_1_4}[37], {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], {odr_tnr_sp_bc_rs4n_1_4}[40], {ifd_segmap_tnr_blend_1_4}[41], {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], {odr_tnr_fp_yuvn_1_4}[44], {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] } + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[66] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_gmv_1_4*/, 46 /*gmv_statistics_1_1*/, 47 /*odr_gmv_feature_1_4*/, 48 /*odr_gmv_match_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 51 /*tnr7_bc_1_2*/, 52 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 55 /*tnr7_blend_1_1*/, 58 /*image_upscaler_1_1*/, 62 /*cas_1_1*/, 63 /*odr_ofs_mp_1_4*/, 64 /*b2i_ds_output_1_1*/, 65 /*odr_ofs_dp_1_4*/, 56 /*odr_tnr_fp_yuvn_1_4*/, 57 /*tnr_scaler_fp_1_1*/, 59 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 49 /*ifd_segmap_tnr_bc_1_4*/, 53 /*ifd_segmap_tnr_blend_1_4*/, 60 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 50 /*smurf_tnr_bc_1_0*/, 54 /*smurf_tnr_blend_1_0*/, 61 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::Init(LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEF8C61FC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], ifd_segmap_xnr_1_4[25], smurf_xnr_1_0[26], ifd_segmap_acm_1_4[30], smurf_acm_1_0[31], b2i_ds_1_1[35], lbff_crop_espa_1_4[36], image_upscaler_1_1[37], ifd_segmap_cas_1_4[38], smurf_cas_1_0[39], odr_ofs_mp_1_4[41], b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9F1CE3F0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFF9CE3FCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32] } + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[44] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 21 /*bnlm_3_4*/, 22 /*bxt_demosaic*/, 23 /*vcsc_2_0_b*/, 24 /*gltm_2_0*/, 27 /*xnr_5_4*/, 28 /*vcr_3_1*/, 29 /*glim_2_0*/, 32 /*acm_1_2*/, 33 /*gammatm_v4*/, 34 /*csc_1_1*/, 35 /*b2i_ds_1_1*/, 36 /*lbff_crop_espa_1_4*/, 37 /*image_upscaler_1_1*/, 40 /*cas_1_1*/, 41 /*odr_ofs_mp_1_4*/, 42 /*b2i_ds_output_1_1*/, 43 /*odr_ofs_dp_1_4*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_segmap_bnlm_1_4*/, 25 /*ifd_segmap_xnr_1_4*/, 30 /*ifd_segmap_acm_1_4*/, 38 /*ifd_segmap_cas_1_4*/, 20 /*smurf_bnlm_1_0*/, 26 /*smurf_xnr_1_0*/, 31 /*smurf_acm_1_0*/, 39 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::Init(LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEFF18C3FC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41], ifd_segmap_cas_1_4[42], smurf_cas_1_0[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9FE39C7F0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFF39C7FCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[48] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 42 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 43 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::Init(LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 60, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[60] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEFDDAC630FFC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_tnr_sp_bc_yuv4nm1_1_4[19], ifd_tnr_sp_bc_rs4nm1_1_4[20], ifd_tnr_fp_blend_yuvnm1_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], tnr_scaler_lb_1_1[41], ifd_segmap_tnr_bc_1_4[43], smurf_tnr_bc_1_0[44], odr_tnr_sp_bc_rs4n_1_4[46], ifd_segmap_tnr_blend_1_4[47], smurf_tnr_blend_1_0[48], odr_tnr_fp_yuvn_1_4[50], tnr_scaler_fp_1_1[51], image_upscaler_1_1[52], odr_tnr_scale_fp_yuv4n_1_4[53], ifd_segmap_cas_1_4[54], smurf_cas_1_0[55], odr_ofs_mp_1_4[57], b2i_ds_output_1_1[58], odr_ofs_dp_1_4[59] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9E3BD8E71FF0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFCE71FFCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {tnr7_spatial_1_1}[29], {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], {odr_tnr_sp_bc_rs4n_1_4}[35], {ifd_segmap_tnr_blend_1_4}[36], {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], {odr_tnr_fp_yuvn_1_4}[39], {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] } + uint8_t systemApisSizes[60] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[60] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*tnr7_spatial_1_1*/, 41 /*tnr_scaler_lb_1_1*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 20 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 42 /*tnr7_ims_1_2*/, 45 /*tnr7_bc_1_2*/, 46 /*odr_tnr_sp_bc_rs4n_1_4*/, 21 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 49 /*tnr7_blend_1_1*/, 52 /*image_upscaler_1_1*/, 56 /*cas_1_1*/, 57 /*odr_ofs_mp_1_4*/, 58 /*b2i_ds_output_1_1*/, 59 /*odr_ofs_dp_1_4*/, 50 /*odr_tnr_fp_yuvn_1_4*/, 51 /*tnr_scaler_fp_1_1*/, 53 /*odr_tnr_scale_fp_yuv4n_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 43 /*ifd_segmap_tnr_bc_1_4*/, 47 /*ifd_segmap_tnr_blend_1_4*/, 54 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 44 /*smurf_tnr_bc_1_0*/, 48 /*smurf_tnr_blend_1_0*/, 55 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::Init(LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 64, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[64] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEFDDF58C61FFC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], gmv_statistics_1_1[44], odr_gmv_feature_1_4[45], odr_gmv_match_1_4[46], ifd_segmap_tnr_bc_1_4[47], smurf_tnr_bc_1_0[48], odr_tnr_sp_bc_rs4n_1_4[50], ifd_segmap_tnr_blend_1_4[51], smurf_tnr_blend_1_0[52], odr_tnr_fp_yuvn_1_4[54], tnr_scaler_fp_1_1[55], image_upscaler_1_1[56], odr_tnr_scale_fp_yuv4n_1_4[57], ifd_segmap_cas_1_4[58], smurf_cas_1_0[59], odr_ofs_mp_1_4[61], b2i_ds_output_1_1[62], odr_ofs_dp_1_4[63] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9E3BFB1CE3FF0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFF9CE3FFCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {gmv_statistics_1_1}[33], {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], {ifd_segmap_tnr_bc_1_4}[36], {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], {odr_tnr_sp_bc_rs4n_1_4}[39], {ifd_segmap_tnr_blend_1_4}[40], {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], {odr_tnr_fp_yuvn_1_4}[43], {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] } + uint8_t systemApisSizes[64] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[64] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*tnr7_spatial_1_1*/, 42 /*tnr_scaler_lb_1_1*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_gmv_1_4*/, 44 /*gmv_statistics_1_1*/, 45 /*odr_gmv_feature_1_4*/, 46 /*odr_gmv_match_1_4*/, 20 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 21 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 43 /*tnr7_ims_1_2*/, 49 /*tnr7_bc_1_2*/, 50 /*odr_tnr_sp_bc_rs4n_1_4*/, 22 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 53 /*tnr7_blend_1_1*/, 56 /*image_upscaler_1_1*/, 60 /*cas_1_1*/, 61 /*odr_ofs_mp_1_4*/, 62 /*b2i_ds_output_1_1*/, 63 /*odr_ofs_dp_1_4*/, 54 /*odr_tnr_fp_yuvn_1_4*/, 55 /*tnr_scaler_fp_1_1*/, 57 /*odr_tnr_scale_fp_yuv4n_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 47 /*ifd_segmap_tnr_bc_1_4*/, 51 /*ifd_segmap_tnr_blend_1_4*/, 58 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 48 /*smurf_tnr_bc_1_0*/, 52 /*smurf_tnr_blend_1_0*/, 59 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::Init(LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 39, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[39] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77C0C3FF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_segmap_bnlm_1_4[16], smurf_bnlm_1_0[17], ifd_segmap_xnr_1_4[22], smurf_xnr_1_0[23], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], image_upscaler_1_1[32], ifd_segmap_cas_1_4[33], smurf_cas_1_0[34], odr_ofs_mp_1_4[36], b2i_ds_output_1_1[37], odr_ofs_dp_1_4[38] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F81C7F81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_segmap_bnlm_1_4}[9], {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[11], {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {ifd_segmap_cas_1_4}[17], {smurf_cas_1_0}[18], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FC1C7FF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[17], {b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {image_upscaler_1_1}[20], {ifd_segmap_cas_1_4}[21], {smurf_cas_1_0}[22], {cas_1_1}[23], {odr_ofs_mp_1_4}[24], {b2i_ds_output_1_1}[25], {odr_ofs_dp_1_4}[26] } + uint8_t systemApisSizes[39] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[39] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 24 /*xnr_5_4*/, 25 /*vcr_3_1*/, 26 /*glim_2_0*/, 27 /*acm_1_2*/, 28 /*gammatm_v4*/, 29 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*image_upscaler_1_1*/, 35 /*cas_1_1*/, 36 /*odr_ofs_mp_1_4*/, 37 /*b2i_ds_output_1_1*/, 38 /*odr_ofs_dp_1_4*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_segmap_bnlm_1_4*/, 22 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_cas_1_4*/, 17 /*smurf_bnlm_1_0*/, 23 /*smurf_xnr_1_0*/, 34 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::Init(LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 43, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[43] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77F8187FF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], ifd_segmap_bnlm_1_4[17], smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], b2i_ds_1_1[31], lbff_crop_espa_1_4[32], image_upscaler_1_1[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36], ifd_segmap_cas_1_4[37], smurf_cas_1_0[38], odr_ofs_mp_1_4[40], b2i_ds_output_1_1[41], odr_ofs_dp_1_4[42] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4FF038FF81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_segmap_bnlm_1_4}[10], {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[12], {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20], {ifd_segmap_cas_1_4}[21], {smurf_cas_1_0}[22], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[23], {odr_ofs_dp_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF838FFF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[18], {b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], {ifd_segmap_cas_1_4}[25], {smurf_cas_1_0}[26], {cas_1_1}[27], {odr_ofs_mp_1_4}[28], {b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint8_t systemApisSizes[43] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[43] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 25 /*xnr_5_4*/, 26 /*vcr_3_1*/, 27 /*glim_2_0*/, 28 /*acm_1_2*/, 29 /*gammatm_v4*/, 30 /*csc_1_1*/, 31 /*b2i_ds_1_1*/, 32 /*lbff_crop_espa_1_4*/, 33 /*image_upscaler_1_1*/, 39 /*cas_1_1*/, 40 /*odr_ofs_mp_1_4*/, 41 /*b2i_ds_output_1_1*/, 42 /*odr_ofs_dp_1_4*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_gmv_1_4*/, 34 /*gmv_statistics_1_1*/, 35 /*odr_gmv_feature_1_4*/, 36 /*odr_gmv_match_1_4*/, 17 /*ifd_segmap_bnlm_1_4*/, 23 /*ifd_segmap_xnr_1_4*/, 37 /*ifd_segmap_cas_1_4*/, 18 /*smurf_bnlm_1_0*/, 24 /*smurf_xnr_1_0*/, 38 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::Init(LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 55, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[55] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77EED6061FFF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_tnr_sp_bc_yuv4nm1_1_4[16], ifd_tnr_sp_bc_rs4nm1_1_4[17], ifd_tnr_fp_blend_yuvnm1_1_4[18], ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], ifd_segmap_xnr_1_4[25], smurf_xnr_1_0[26], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], tnr_scaler_lb_1_1[36], ifd_segmap_tnr_bc_1_4[38], smurf_tnr_bc_1_0[39], odr_tnr_sp_bc_rs4n_1_4[41], ifd_segmap_tnr_blend_1_4[42], smurf_tnr_blend_1_0[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], image_upscaler_1_1[47], odr_tnr_scale_fp_yuv4n_1_4[48], ifd_segmap_cas_1_4[49], smurf_cas_1_0[50], odr_ofs_mp_1_4[52], b2i_ds_output_1_1[53], odr_ofs_dp_1_4[54] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F1DEC0E3FF81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], {ifd_tnr_sp_bc_rs4nm1_1_4}[10], {ifd_tnr_fp_blend_yuvnm1_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[19], {tnr7_ims_1_2}[20], {ifd_segmap_tnr_bc_1_4}[21], {smurf_tnr_bc_1_0}[22], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_segmap_tnr_blend_1_4}[24], {smurf_tnr_blend_1_0}[25], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[26], {odr_tnr_scale_fp_yuv4n_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFE0E3FFF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[20], {b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1}[23], {tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2}[28], {odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_segmap_tnr_blend_1_4}[30], {smurf_tnr_blend_1_0}[31], {tnr7_blend_1_1}[32], {odr_tnr_fp_yuvn_1_4}[33], {tnr_scaler_fp_1_1}[34], {image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1}[39], {odr_ofs_mp_1_4}[40], {b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint8_t systemApisSizes[55] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[55] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 21 /*bnlm_3_4*/, 22 /*bxt_demosaic*/, 23 /*vcsc_2_0_b*/, 24 /*gltm_2_0*/, 27 /*xnr_5_4*/, 28 /*vcr_3_1*/, 29 /*glim_2_0*/, 30 /*acm_1_2*/, 31 /*gammatm_v4*/, 32 /*csc_1_1*/, 33 /*b2i_ds_1_1*/, 34 /*lbff_crop_espa_1_4*/, 35 /*tnr7_spatial_1_1*/, 36 /*tnr_scaler_lb_1_1*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 17 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 40 /*tnr7_bc_1_2*/, 41 /*odr_tnr_sp_bc_rs4n_1_4*/, 18 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 44 /*tnr7_blend_1_1*/, 47 /*image_upscaler_1_1*/, 51 /*cas_1_1*/, 52 /*odr_ofs_mp_1_4*/, 53 /*b2i_ds_output_1_1*/, 54 /*odr_ofs_dp_1_4*/, 45 /*odr_tnr_fp_yuvn_1_4*/, 46 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/, 19 /*ifd_segmap_bnlm_1_4*/, 25 /*ifd_segmap_xnr_1_4*/, 38 /*ifd_segmap_tnr_bc_1_4*/, 42 /*ifd_segmap_tnr_blend_1_4*/, 49 /*ifd_segmap_cas_1_4*/, 20 /*smurf_bnlm_1_0*/, 26 /*smurf_xnr_1_0*/, 39 /*smurf_tnr_bc_1_0*/, 43 /*smurf_tnr_blend_1_0*/, 50 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::Init(LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 59, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[59] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77EEFAC0C3FFF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], b2i_ds_1_1[34], lbff_crop_espa_1_4[35], tnr_scaler_lb_1_1[37], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41], ifd_segmap_tnr_bc_1_4[42], smurf_tnr_bc_1_0[43], odr_tnr_sp_bc_rs4n_1_4[45], ifd_segmap_tnr_blend_1_4[46], smurf_tnr_blend_1_0[47], odr_tnr_fp_yuvn_1_4[49], tnr_scaler_fp_1_1[50], image_upscaler_1_1[51], odr_tnr_scale_fp_yuv4n_1_4[52], ifd_segmap_cas_1_4[53], smurf_cas_1_0[54], odr_ofs_mp_1_4[56], b2i_ds_output_1_1[57], odr_ofs_dp_1_4[58] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F1DFD81C7FF81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[20], {tnr7_ims_1_2}[21], {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], {ifd_segmap_tnr_bc_1_4}[25], {smurf_tnr_bc_1_0}[26], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_segmap_tnr_blend_1_4}[28], {smurf_tnr_blend_1_0}[29], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[30], {odr_tnr_scale_fp_yuv4n_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFFC1C7FFF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1}[24], {tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2}[32], {odr_tnr_sp_bc_rs4n_1_4}[33], {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1}[36], {odr_tnr_fp_yuvn_1_4}[37], {tnr_scaler_fp_1_1}[38], {image_upscaler_1_1}[39], {odr_tnr_scale_fp_yuv4n_1_4}[40], {ifd_segmap_cas_1_4}[41], {smurf_cas_1_0}[42], {cas_1_1}[43], {odr_ofs_mp_1_4}[44], {b2i_ds_output_1_1}[45], {odr_ofs_dp_1_4}[46] } + uint8_t systemApisSizes[59] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[59] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 31 /*acm_1_2*/, 32 /*gammatm_v4*/, 33 /*csc_1_1*/, 34 /*b2i_ds_1_1*/, 35 /*lbff_crop_espa_1_4*/, 36 /*tnr7_spatial_1_1*/, 37 /*tnr_scaler_lb_1_1*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/, 17 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 18 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 38 /*tnr7_ims_1_2*/, 44 /*tnr7_bc_1_2*/, 45 /*odr_tnr_sp_bc_rs4n_1_4*/, 19 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 48 /*tnr7_blend_1_1*/, 51 /*image_upscaler_1_1*/, 55 /*cas_1_1*/, 56 /*odr_ofs_mp_1_4*/, 57 /*b2i_ds_output_1_1*/, 58 /*odr_ofs_dp_1_4*/, 49 /*odr_tnr_fp_yuvn_1_4*/, 50 /*tnr_scaler_fp_1_1*/, 52 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 42 /*ifd_segmap_tnr_bc_1_4*/, 46 /*ifd_segmap_tnr_blend_1_4*/, 53 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 43 /*smurf_tnr_bc_1_0*/, 47 /*smurf_tnr_blend_1_0*/, 54 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 47, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[47] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77C630FFFC71, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], image_upscaler_1_1[40], ifd_segmap_cas_1_4[41], smurf_cas_1_0[42], odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F8E71FFE0C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FCE71FFFCF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], {ifd_segmap_cas_1_4}[30], {smurf_cas_1_0}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35] } + uint8_t systemApisSizes[47] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[47] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*image_upscaler_1_1*/, 43 /*cas_1_1*/, 44 /*odr_ofs_mp_1_4*/, 45 /*b2i_ds_output_1_1*/, 46 /*odr_ofs_dp_1_4*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 41 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 42 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77F8C61FFFC71, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_gmv_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], image_upscaler_1_1[41], gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], ifd_segmap_cas_1_4[45], smurf_cas_1_0[46], odr_ofs_mp_1_4[48], b2i_ds_output_1_1[49], odr_ofs_dp_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4FF1CE3FFE0C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF9CE3FFFCF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {image_upscaler_1_1}[30], {gmv_statistics_1_1}[31], {odr_gmv_feature_1_4}[32], {odr_gmv_match_1_4}[33], {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], {cas_1_1}[36], {odr_ofs_mp_1_4}[37], {b2i_ds_output_1_1}[38], {odr_ofs_dp_1_4}[39] } + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[51] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*image_upscaler_1_1*/, 47 /*cas_1_1*/, 48 /*odr_ofs_mp_1_4*/, 49 /*b2i_ds_output_1_1*/, 50 /*odr_ofs_dp_1_4*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_gmv_1_4*/, 42 /*gmv_statistics_1_1*/, 43 /*odr_gmv_feature_1_4*/, 44 /*odr_gmv_match_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 46 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void WithCvOuterNode::Init(WithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 6, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[6] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 55449 /*is_odr_b*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x3B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_b[4], is_odr_c[5] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4], {is_odr_c}[5] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4], {is_odr_c}[5] } + uint8_t systemApisSizes[6] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_b*/, 0 /*is_odr_c*/}; + uint16_t runKernelConfigOrder[6] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/, 4 /*is_odr_b*/, 5 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +/* + * Inner Nodes Setters + */ +void IsysOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 34; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 34; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C1FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3C1FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwGdcOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwGdcOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007C380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007C380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF83C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFF83C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F0000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007C380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007C380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF83C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFF83C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysWithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void SwSegnetOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwSegnetOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F40000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwScalerOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwScalerOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void SwNntmOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwNntmOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 58; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 58; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F4000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysPdaf2WithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysPdaf2WithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03F9F + bitmaps.teb[0] = 0xEFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03F9F + bitmaps.teb[0] = 0xDFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE00180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03F9F + bitmaps.teb[0] = 0xFFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFE00180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F40000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23F9F + bitmaps.teb[0] = 0xEFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23F9F + bitmaps.teb[0] = 0xDFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23F9F + bitmaps.teb[0] = 0xFFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF400000000000000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03E9F + bitmaps.teb[0] = 0xEFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03E9F + bitmaps.teb[0] = 0xDFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF00C00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03E9F + bitmaps.teb[0] = 0xFFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFFFFF00C00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FA0000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 63; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC81E9F + bitmaps.teb[0] = 0xFFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC83F9F + bitmaps.teb[0] = 0xEFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC81E9F + bitmaps.teb[0] = 0xEFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC83F9F + bitmaps.teb[0] = 0xDFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC81E9F + bitmaps.teb[0] = 0xDFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFC00300; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFC0300; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC83F9F + bitmaps.teb[0] = 0xFFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 63; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFFFFC00300; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E80000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysPdaf2OuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysPdaf2OuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003F9F + bitmaps.teb[0] = 0x20003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003F9F + bitmaps.teb[0] = 0x10003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003F9F + bitmaps.teb[0] = 0x30003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323F9F + bitmaps.teb[0] = 0x20323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323F9F + bitmaps.teb[0] = 0x10323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C01FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323F9F + bitmaps.teb[0] = 0x30323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3C01FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03F9F + bitmaps.teb[0] = 0x2FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007FC380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03F9F + bitmaps.teb[0] = 0x1FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007FC380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF803C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03F9F + bitmaps.teb[0] = 0x3FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFF803C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23F9F + bitmaps.teb[0] = 0x2FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007FC380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23F9F + bitmaps.teb[0] = 0x1FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007FC380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF803C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23F9F + bitmaps.teb[0] = 0x3FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFF803C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23F9F + bitmaps.teb[0] = 0xEFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23F9F + bitmaps.teb[0] = 0xDFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23F9F + bitmaps.teb[0] = 0xFFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF400000000000000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003E9F + bitmaps.teb[0] = 0x20003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003E9F + bitmaps.teb[0] = 0x10003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003E9F + bitmaps.teb[0] = 0x30003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFE3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF8000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323E9F + bitmaps.teb[0] = 0x20323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323E9F + bitmaps.teb[0] = 0x10323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323E9F + bitmaps.teb[0] = 0x30323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1E0FE3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF8000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03E9F + bitmaps.teb[0] = 0x2FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03E9F + bitmaps.teb[0] = 0x1FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03E9F + bitmaps.teb[0] = 0x3FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFC1E3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23E9F + bitmaps.teb[0] = 0x2FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23E9F + bitmaps.teb[0] = 0x1FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23E9F + bitmaps.teb[0] = 0x3FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFC1E3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23E9F + bitmaps.teb[0] = 0xEFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23E9F + bitmaps.teb[0] = 0xDFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000FF0D0; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF00C00; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23E9F + bitmaps.teb[0] = 0xFFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFF00C00; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFA00000000000000; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysDolOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000BF + bitmaps.teb[0] = 0x300000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EBF + bitmaps.teb[0] = 0x20041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000BF + bitmaps.teb[0] = 0x200000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EBF + bitmaps.teb[0] = 0x10041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000BF + bitmaps.teb[0] = 0x100000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EBF + bitmaps.teb[0] = 0x30041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200BF + bitmaps.teb[0] = 0x303200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EBF + bitmaps.teb[0] = 0x20361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200BF + bitmaps.teb[0] = 0x203200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EBF + bitmaps.teb[0] = 0x10361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200BF + bitmaps.teb[0] = 0x103200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1EFEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EBF + bitmaps.teb[0] = 0x30361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1EFEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000BF + bitmaps.teb[0] = 0x3FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EBF + bitmaps.teb[0] = 0x2FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000BF + bitmaps.teb[0] = 0x2FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EBF + bitmaps.teb[0] = 0x1FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000BF + bitmaps.teb[0] = 0x1FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFDEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EBF + bitmaps.teb[0] = 0x3FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFDEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200BF + bitmaps.teb[0] = 0x3FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EBF + bitmaps.teb[0] = 0x2FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200BF + bitmaps.teb[0] = 0x2FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EBF + bitmaps.teb[0] = 0x1FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200BF + bitmaps.teb[0] = 0x1FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFDEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EBF + bitmaps.teb[0] = 0x3FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFDEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDolSmoothOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 8; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // RBM - 0x0000000000000000000000025001A011 + bitmaps.rbm[0] = 0x5001A011; + bitmaps.rbm[1] = 0x2; + // DEB - 0x0000000000000000000000018C000131 + bitmaps.deb[0] = 0x8C000131; + bitmaps.deb[1] = 0x1; + // TEB - 0x0000000000010017 + bitmaps.teb[0] = 0x10017; + // REB - 0x00000000000000000000000000160787 + bitmaps.reb[0] = 0x160787; + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDolSmoothOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 8; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xF0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000FF + bitmaps.teb[0] = 0x300000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EFF + bitmaps.teb[0] = 0x20041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000FF + bitmaps.teb[0] = 0x200000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EFF + bitmaps.teb[0] = 0x10041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000FF + bitmaps.teb[0] = 0x100000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EFF + bitmaps.teb[0] = 0x30041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200FF + bitmaps.teb[0] = 0x303200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EFF + bitmaps.teb[0] = 0x20361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200FF + bitmaps.teb[0] = 0x203200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EFF + bitmaps.teb[0] = 0x10361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200FF + bitmaps.teb[0] = 0x103200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3DFDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EFF + bitmaps.teb[0] = 0x30361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3DFDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000FF + bitmaps.teb[0] = 0x3FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EFF + bitmaps.teb[0] = 0x2FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000FF + bitmaps.teb[0] = 0x2FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EFF + bitmaps.teb[0] = 0x1FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000FF + bitmaps.teb[0] = 0x1FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800420007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFBDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EFF + bitmaps.teb[0] = 0x3FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFBDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200FF + bitmaps.teb[0] = 0x3FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EFF + bitmaps.teb[0] = 0x2FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200FF + bitmaps.teb[0] = 0x2FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EFF + bitmaps.teb[0] = 0x1FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200FF + bitmaps.teb[0] = 0x1FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000420007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFBDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EFF + bitmaps.teb[0] = 0x3FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFBDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 36; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000409F + bitmaps.teb[0] = 0x3000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041E9F + bitmaps.teb[0] = 0x30041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020045E9F + bitmaps.teb[0] = 0x20045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000409F + bitmaps.teb[0] = 0x2000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041E9F + bitmaps.teb[0] = 0x20041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010045E9F + bitmaps.teb[0] = 0x10045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000409F + bitmaps.teb[0] = 0x1000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041E9F + bitmaps.teb[0] = 0x10041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030045E9F + bitmaps.teb[0] = 0x30045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 36; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FCFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F0000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 32; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF80E0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 24 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF90E0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE0E0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F1FFE0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 32; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7F1FFE0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C00000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 40; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032409F + bitmaps.teb[0] = 0x3032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361E9F + bitmaps.teb[0] = 0x30361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020365E9F + bitmaps.teb[0] = 0x20365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032409F + bitmaps.teb[0] = 0x2032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361E9F + bitmaps.teb[0] = 0x20361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010365E9F + bitmaps.teb[0] = 0x10365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032409F + bitmaps.teb[0] = 0x1032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361E9F + bitmaps.teb[0] = 0x10361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030365E9F + bitmaps.teb[0] = 0x30365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 40; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xF1FCFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F0000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0409F + bitmaps.teb[0] = 0x3FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41E9F + bitmaps.teb[0] = 0x3FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC45E9F + bitmaps.teb[0] = 0x2FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0409F + bitmaps.teb[0] = 0x2FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C3000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41E9F + bitmaps.teb[0] = 0x2FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C30003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC45E9F + bitmaps.teb[0] = 0x1FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0409F + bitmaps.teb[0] = 0x1FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C3000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41E9F + bitmaps.teb[0] = 0x1FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC45E9F + bitmaps.teb[0] = 0x3FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFE3CFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C0000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F0E0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001F0E0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001F0E0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE0F1FFE0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFE0F1FFE0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 52; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2409F + bitmaps.teb[0] = 0x3FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61E9F + bitmaps.teb[0] = 0x3FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF65E9F + bitmaps.teb[0] = 0x2FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2409F + bitmaps.teb[0] = 0x2FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C3000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61E9F + bitmaps.teb[0] = 0x2FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C30003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF65E9F + bitmaps.teb[0] = 0x1FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2409F + bitmaps.teb[0] = 0x1FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C3000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61E9F + bitmaps.teb[0] = 0x1FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF65E9F + bitmaps.teb[0] = 0x3FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 52; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFE3CFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 33; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 33; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFE3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1E0FE3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFC1E3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF8000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFC1E3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030081E9F + bitmaps.teb[0] = 0x30081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020083F9F + bitmaps.teb[0] = 0x20083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020081E9F + bitmaps.teb[0] = 0x20081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010083F9F + bitmaps.teb[0] = 0x10083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010081E9F + bitmaps.teb[0] = 0x10081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x783F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030083F9F + bitmaps.teb[0] = 0x30083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3F8FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A1E9F + bitmaps.teb[0] = 0x303A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A3F9F + bitmaps.teb[0] = 0x203A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A1E9F + bitmaps.teb[0] = 0x203A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A3F9F + bitmaps.teb[0] = 0x103A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A1E9F + bitmaps.teb[0] = 0x103A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7803F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F83F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A3F9F + bitmaps.teb[0] = 0x303A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7803F8FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC81E9F + bitmaps.teb[0] = 0x3FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC83F9F + bitmaps.teb[0] = 0x2FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC81E9F + bitmaps.teb[0] = 0x2FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC83F9F + bitmaps.teb[0] = 0x1FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC81E9F + bitmaps.teb[0] = 0x1FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFF0078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC83F9F + bitmaps.teb[0] = 0x3FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFF0078FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA1E9F + bitmaps.teb[0] = 0x3FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA3F9F + bitmaps.teb[0] = 0x2FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA1E9F + bitmaps.teb[0] = 0x2FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA3F9F + bitmaps.teb[0] = 0x1FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA1E9F + bitmaps.teb[0] = 0x1FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF0078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFF078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA3F9F + bitmaps.teb[0] = 0x3FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFF0078FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 67; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA1E9F + bitmaps.teb[0] = 0xFFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA3F9F + bitmaps.teb[0] = 0xEFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA1E9F + bitmaps.teb[0] = 0xEFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA3F9F + bitmaps.teb[0] = 0xDFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA1E9F + bitmaps.teb[0] = 0xDFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC00300; + disabledRunKernelsBitmap[1] = 0x7; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFC0300; + disabledRunKernelsBitmap[1] = 0x7; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA3F9F + bitmaps.teb[0] = 0xFFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 67; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFC00300; + disabledRunKernelsBitmap[1] |= 0x7; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xE800000000000000; + disabledRunKernelsBitmap[1] |= 0x7; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F800000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F1000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerNoGmvWithTnrWithOpacityOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13FFFF0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xE13F; + // TEB - 0x000000063FC0009F + bitmaps.teb[0] = 0x3FC0009F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13FFFF0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xC13F; + // TEB - 0x000000062FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13FFFF0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xC13F; + // TEB - 0x000000062FC0009F + bitmaps.teb[0] = 0x2FC0009F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007C380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213FFFF0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0x213F; + // TEB - 0x000000061FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213FFFF0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0x213F; + // TEB - 0x000000061FC0009F + bitmaps.teb[0] = 0x1FC0009F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007C380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 ifd_segmap_tnr_bc_1_4- inner node disablement + // 36 smurf_tnr_bc_1_0- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_segmap_tnr_blend_1_4- inner node disablement + // 40 smurf_tnr_blend_1_0- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF83C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 ifd_segmap_tnr_bc_1_4- inner node disablement + // 36 smurf_tnr_bc_1_0- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_segmap_tnr_blend_1_4- inner node disablement + // 40 smurf_tnr_blend_1_0- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13FFFF0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xE13F; + // TEB - 0x000000063FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvWithTnrWithOpacityOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFF83C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003F9F + bitmaps.teb[0] = 0xE0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003F9F + bitmaps.teb[0] = 0xD0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FFE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE00180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003F9F + bitmaps.teb[0] = 0xF0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFE00180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F8000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323F9F + bitmaps.teb[0] = 0xE0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323F9F + bitmaps.teb[0] = 0xD0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FFE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE00180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323F9F + bitmaps.teb[0] = 0xF0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFE00180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F10000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003E9F + bitmaps.teb[0] = 0xE0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003E9F + bitmaps.teb[0] = 0xD0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000FF0D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF00C00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003E9F + bitmaps.teb[0] = 0xF0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFF00C00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FC000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323E9F + bitmaps.teb[0] = 0xE0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323E9F + bitmaps.teb[0] = 0xD0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF00C00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323E9F + bitmaps.teb[0] = 0xF0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFF00C00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F88000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysDolWithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000BF + bitmaps.teb[0] = 0xF00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EBF + bitmaps.teb[0] = 0xE0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000BF + bitmaps.teb[0] = 0xE00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EBF + bitmaps.teb[0] = 0xD0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000BF + bitmaps.teb[0] = 0xD00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000C3EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF30000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EBF + bitmaps.teb[0] = 0xF0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFF30000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FC000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200BF + bitmaps.teb[0] = 0xF03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EBF + bitmaps.teb[0] = 0xE0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200BF + bitmaps.teb[0] = 0xE03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EBF + bitmaps.teb[0] = 0xD0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200BF + bitmaps.teb[0] = 0xD03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF30000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EBF + bitmaps.teb[0] = 0xF0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFF30000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F88000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000BF + bitmaps.teb[0] = 0xFFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EBF + bitmaps.teb[0] = 0xEFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000BF + bitmaps.teb[0] = 0xEFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EBF + bitmaps.teb[0] = 0xDFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000BF + bitmaps.teb[0] = 0xDFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF30000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EBF + bitmaps.teb[0] = 0xFFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFFFFF30000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FA0000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200BF + bitmaps.teb[0] = 0xFFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EBF + bitmaps.teb[0] = 0xEFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200BF + bitmaps.teb[0] = 0xEFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EBF + bitmaps.teb[0] = 0xDFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200BF + bitmaps.teb[0] = 0xDFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000C3EC0; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF30000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EBF + bitmaps.teb[0] = 0xFFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFF30000; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFA00000000000000; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000FF + bitmaps.teb[0] = 0xF00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EFF + bitmaps.teb[0] = 0xE0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000FF + bitmaps.teb[0] = 0xE00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EFF + bitmaps.teb[0] = 0xD0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000FF + bitmaps.teb[0] = 0xD00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000187D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE60000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EFF + bitmaps.teb[0] = 0xF0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFE60000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F8000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200FF + bitmaps.teb[0] = 0xF03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EFF + bitmaps.teb[0] = 0xE0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200FF + bitmaps.teb[0] = 0xE03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EFF + bitmaps.teb[0] = 0xD0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200FF + bitmaps.teb[0] = 0xD03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000187D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE60000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EFF + bitmaps.teb[0] = 0xF0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFE60000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F10000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000FF + bitmaps.teb[0] = 0xFFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EFF + bitmaps.teb[0] = 0xEFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000FF + bitmaps.teb[0] = 0xEFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EFF + bitmaps.teb[0] = 0xDFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000FF + bitmaps.teb[0] = 0xDFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000187D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE60000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EFF + bitmaps.teb[0] = 0xFFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFE60000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F40000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200FF + bitmaps.teb[0] = 0xFFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EFF + bitmaps.teb[0] = 0xEFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200FF + bitmaps.teb[0] = 0xEFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EFF + bitmaps.teb[0] = 0xDFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200FF + bitmaps.teb[0] = 0xDFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE60000; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EFF + bitmaps.teb[0] = 0xFFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFE60000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF400000000000000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000409F + bitmaps.teb[0] = 0xF000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041E9F + bitmaps.teb[0] = 0xF0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0045E9F + bitmaps.teb[0] = 0xE0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000409F + bitmaps.teb[0] = 0xE000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041E9F + bitmaps.teb[0] = 0xE0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0045E9F + bitmaps.teb[0] = 0xD0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000409F + bitmaps.teb[0] = 0xD000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041E9F + bitmaps.teb[0] = 0xD0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0045E9F + bitmaps.teb[0] = 0xF0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFE000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032409F + bitmaps.teb[0] = 0xF032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361E9F + bitmaps.teb[0] = 0xF0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0365E9F + bitmaps.teb[0] = 0xE0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032409F + bitmaps.teb[0] = 0xE032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361E9F + bitmaps.teb[0] = 0xE0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0365E9F + bitmaps.teb[0] = 0xD0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032409F + bitmaps.teb[0] = 0xD032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361E9F + bitmaps.teb[0] = 0xD0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0365E9F + bitmaps.teb[0] = 0xF0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFC4000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 60; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0409F + bitmaps.teb[0] = 0xFFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41E9F + bitmaps.teb[0] = 0xFFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC45E9F + bitmaps.teb[0] = 0xEFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0409F + bitmaps.teb[0] = 0xEFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41E9F + bitmaps.teb[0] = 0xEFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC45E9F + bitmaps.teb[0] = 0xDFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0409F + bitmaps.teb[0] = 0xDFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41E9F + bitmaps.teb[0] = 0xDFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC45E9F + bitmaps.teb[0] = 0xFFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 60; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFD0000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 64; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2409F + bitmaps.teb[0] = 0xFFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61E9F + bitmaps.teb[0] = 0xFFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF65E9F + bitmaps.teb[0] = 0xEFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2409F + bitmaps.teb[0] = 0xEFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61E9F + bitmaps.teb[0] = 0xEFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF65E9F + bitmaps.teb[0] = 0xDFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2409F + bitmaps.teb[0] = 0xDFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61E9F + bitmaps.teb[0] = 0xDFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF65E9F + bitmaps.teb[0] = 0xFFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 64; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFD00000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[19].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[27].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 36 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 36 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 acm_1_2- inner node disablement + // 28 gammatm_v4- inner node disablement + // 29 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 ifd_segmap_cas_1_4- inner node disablement + // 34 smurf_cas_1_0- inner node disablement + // 35 cas_1_1- inner node disablement + // 36 odr_ofs_mp_1_4- inner node disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 acm_1_2- inner node disablement + // 28 gammatm_v4- inner node disablement + // 29 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 ifd_segmap_cas_1_4- inner node disablement + // 34 smurf_cas_1_0- inner node disablement + // 35 cas_1_1- inner node disablement + // 36 odr_ofs_mp_1_4- inner node disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[19].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[27].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7F00000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[20].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[28].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 acm_1_2- inner node disablement + // 29 gammatm_v4- inner node disablement + // 30 csc_1_1- inner node disablement + // 31 b2i_ds_1_1- inner node disablement + // 32 lbff_crop_espa_1_4- inner node disablement + // 33 image_upscaler_1_1- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_segmap_cas_1_4- inner node disablement + // 38 smurf_cas_1_0- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 acm_1_2- inner node disablement + // 29 gammatm_v4- inner node disablement + // 30 csc_1_1- inner node disablement + // 31 b2i_ds_1_1- inner node disablement + // 32 lbff_crop_espa_1_4- inner node disablement + // 33 image_upscaler_1_1- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_segmap_cas_1_4- inner node disablement + // 38 smurf_cas_1_0- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[20].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[28].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E200000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[22].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[30].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 52 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 52 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 tnr7_spatial_1_1- inner node disablement + // 36 tnr_scaler_lb_1_1- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 ifd_segmap_tnr_bc_1_4- inner node disablement + // 39 smurf_tnr_bc_1_0- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_segmap_tnr_blend_1_4- inner node disablement + // 43 smurf_tnr_blend_1_0- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 49 ifd_segmap_cas_1_4- inner node disablement + // 50 smurf_cas_1_0- inner node disablement + // 51 cas_1_1- inner node disablement + // 52 odr_ofs_mp_1_4- inner node disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 tnr7_spatial_1_1- inner node disablement + // 36 tnr_scaler_lb_1_1- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 ifd_segmap_tnr_bc_1_4- inner node disablement + // 39 smurf_tnr_bc_1_0- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_segmap_tnr_blend_1_4- inner node disablement + // 43 smurf_tnr_blend_1_0- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 49 ifd_segmap_cas_1_4- inner node disablement + // 50 smurf_cas_1_0- inner node disablement + // 51 cas_1_1- inner node disablement + // 52 odr_ofs_mp_1_4- inner node disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[22].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[30].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E800000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 59; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[23].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[31].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 56 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 56 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 tnr7_spatial_1_1- inner node disablement + // 37 tnr_scaler_lb_1_1- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_tnr_bc_1_4- inner node disablement + // 43 smurf_tnr_bc_1_0- inner node disablement + // 44 tnr7_bc_1_2- inner node disablement + // 45 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 46 ifd_segmap_tnr_blend_1_4- inner node disablement + // 47 smurf_tnr_blend_1_0- inner node disablement + // 48 tnr7_blend_1_1- inner node disablement + // 49 odr_tnr_fp_yuvn_1_4- inner node disablement + // 50 tnr_scaler_fp_1_1- inner node disablement + // 51 image_upscaler_1_1- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 53 ifd_segmap_cas_1_4- inner node disablement + // 54 smurf_cas_1_0- inner node disablement + // 55 cas_1_1- inner node disablement + // 56 odr_ofs_mp_1_4- inner node disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 tnr7_spatial_1_1- inner node disablement + // 37 tnr_scaler_lb_1_1- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_tnr_bc_1_4- inner node disablement + // 43 smurf_tnr_bc_1_0- inner node disablement + // 44 tnr7_bc_1_2- inner node disablement + // 45 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 46 ifd_segmap_tnr_blend_1_4- inner node disablement + // 47 smurf_tnr_blend_1_0- inner node disablement + // 48 tnr7_blend_1_1- inner node disablement + // 49 odr_tnr_fp_yuvn_1_4- inner node disablement + // 50 tnr_scaler_fp_1_1- inner node disablement + // 51 image_upscaler_1_1- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 53 ifd_segmap_cas_1_4- inner node disablement + // 54 smurf_cas_1_0- inner node disablement + // 55 cas_1_1- inner node disablement + // 56 odr_ofs_mp_1_4- inner node disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 59; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[23].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[31].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E8000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 47; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0081E9F + bitmaps.teb[0] = 0xF0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0083F9F + bitmaps.teb[0] = 0xE0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0081E9F + bitmaps.teb[0] = 0xE0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0083F9F + bitmaps.teb[0] = 0xD0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0081E9F + bitmaps.teb[0] = 0xD0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFC00300; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC0300; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0083F9F + bitmaps.teb[0] = 0xF0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 47; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFC00300; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7F0000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A1E9F + bitmaps.teb[0] = 0xF03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A3F9F + bitmaps.teb[0] = 0xE03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A1E9F + bitmaps.teb[0] = 0xE03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A3F9F + bitmaps.teb[0] = 0xD03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A1E9F + bitmaps.teb[0] = 0xD03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC00300; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFC0300; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A3F9F + bitmaps.teb[0] = 0xF03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFC00300; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E20000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void WithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void WithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +/* + * Graph 100000 + */ +StaticGraph100000::StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100000, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100000::~StaticGraph100000() +{ +} + +StaticGraphStatus imageSubGraphTopology100000::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100001 + */ +StaticGraph100001::StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100001, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100001::~StaticGraph100001() +{ +} + +StaticGraphStatus imageSubGraphTopology100001::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100002 + */ +StaticGraph100002::StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100002, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100002::~StaticGraph100002() +{ +} + +StaticGraphStatus imageSubGraphTopology100002::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100003 + */ +StaticGraph100003::StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100003, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100003::~StaticGraph100003() +{ +} + +StaticGraphStatus imageSubGraphTopology100003::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100137 + */ +StaticGraph100137::StaticGraph100137(GraphConfiguration100137* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100137, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100137::~StaticGraph100137() +{ +} + +StaticGraphStatus imageSubGraphTopology100137::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100137::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100079 + */ +StaticGraph100079::StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100079, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100079::~StaticGraph100079() +{ +} + +StaticGraphStatus imageSubGraphTopology100079::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100080 + */ +StaticGraph100080::StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100080, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100080::~StaticGraph100080() +{ +} + +StaticGraphStatus imageSubGraphTopology100080::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100138 + */ +StaticGraph100138::StaticGraph100138(GraphConfiguration100138* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100138, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100138::~StaticGraph100138() +{ +} + +StaticGraphStatus imageSubGraphTopology100138::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100138::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100142 + */ +StaticGraph100142::StaticGraph100142(GraphConfiguration100142* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100142, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100142::~StaticGraph100142() +{ +} + +StaticGraphStatus imageSubGraphTopology100142::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100142::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100162 + */ +StaticGraph100162::StaticGraph100162(GraphConfiguration100162* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100162, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100162::~StaticGraph100162() +{ +} + +StaticGraphStatus imageSubGraphTopology100162::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100162::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100143 + */ +StaticGraph100143::StaticGraph100143(GraphConfiguration100143* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100143, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100143::~StaticGraph100143() +{ +} + +StaticGraphStatus imageSubGraphTopology100143::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100143::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100144 + */ +StaticGraph100144::StaticGraph100144(GraphConfiguration100144* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100144, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100144::~StaticGraph100144() +{ +} + +StaticGraphStatus imageSubGraphTopology100144::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100144::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100081 + */ +StaticGraph100081::StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100081, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100081::~StaticGraph100081() +{ +} + +StaticGraphStatus imageSubGraphTopology100081::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100004 + */ +StaticGraph100004::StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100004, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100004::~StaticGraph100004() +{ +} + +StaticGraphStatus imageSubGraphTopology100004::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100005 + */ +StaticGraph100005::StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100005, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100005::~StaticGraph100005() +{ +} + +StaticGraphStatus imageSubGraphTopology100005::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100006 + */ +StaticGraph100006::StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100006, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100006::~StaticGraph100006() +{ +} + +StaticGraphStatus imageSubGraphTopology100006::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100066 + */ +StaticGraph100066::StaticGraph100066(GraphConfiguration100066* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100066, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100066::~StaticGraph100066() +{ +} + +StaticGraphStatus imageSubGraphTopology100066::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100007 + */ +StaticGraph100007::StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100007, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100007::~StaticGraph100007() +{ +} + +StaticGraphStatus imageSubGraphTopology100007::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100067 + */ +StaticGraph100067::StaticGraph100067(GraphConfiguration100067* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100067, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100067::~StaticGraph100067() +{ +} + +StaticGraphStatus imageSubGraphTopology100067::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100139 + */ +StaticGraph100139::StaticGraph100139(GraphConfiguration100139* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100139, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[30]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 31; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100139::~StaticGraph100139() +{ +} + +StaticGraphStatus imageSubGraphTopology100139::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[24]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[27]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100139::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100169 + */ +StaticGraph100169::StaticGraph100169(GraphConfiguration100169* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100169, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100169::~StaticGraph100169() +{ +} + +StaticGraphStatus imageSubGraphTopology100169::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100169::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100008 + */ +StaticGraph100008::StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100008, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 10; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100008::~StaticGraph100008() +{ +} + +StaticGraphStatus imageSubGraphTopology100008::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100009 + */ +StaticGraph100009::StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100009, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100009::~StaticGraph100009() +{ +} + +StaticGraphStatus imageSubGraphTopology100009::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100010 + */ +StaticGraph100010::StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100010, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100010::~StaticGraph100010() +{ +} + +StaticGraphStatus imageSubGraphTopology100010::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100011 + */ +StaticGraph100011::StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100011, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100011::~StaticGraph100011() +{ +} + +StaticGraphStatus imageSubGraphTopology100011::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100140 + */ +StaticGraph100140::StaticGraph100140(GraphConfiguration100140* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100140, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100140::~StaticGraph100140() +{ +} + +StaticGraphStatus imageSubGraphTopology100140::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100140::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100045 + */ +StaticGraph100045::StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100045, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100045::~StaticGraph100045() +{ +} + +StaticGraphStatus imageSubGraphTopology100045::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100012 + */ +StaticGraph100012::StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100012, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100012::~StaticGraph100012() +{ +} + +StaticGraphStatus imageSubGraphTopology100012::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100013 + */ +StaticGraph100013::StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100013, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100013::~StaticGraph100013() +{ +} + +StaticGraphStatus imageSubGraphTopology100013::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100014 + */ +StaticGraph100014::StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100014, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100014::~StaticGraph100014() +{ +} + +StaticGraphStatus imageSubGraphTopology100014::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100015 + */ +StaticGraph100015::StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100015, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100015::~StaticGraph100015() +{ +} + +StaticGraphStatus imageSubGraphTopology100015::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100016 + */ +StaticGraph100016::StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100016, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100016::~StaticGraph100016() +{ +} + +StaticGraphStatus imageSubGraphTopology100016::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100017 + */ +StaticGraph100017::StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100017, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100017::~StaticGraph100017() +{ +} + +StaticGraphStatus imageSubGraphTopology100017::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100018 + */ +StaticGraph100018::StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100018, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100018::~StaticGraph100018() +{ +} + +StaticGraphStatus imageSubGraphTopology100018::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100019 + */ +StaticGraph100019::StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100019, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100019::~StaticGraph100019() +{ +} + +StaticGraphStatus imageSubGraphTopology100019::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100020 + */ +StaticGraph100020::StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100020, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100020::~StaticGraph100020() +{ +} + +StaticGraphStatus imageSubGraphTopology100020::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100020::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100020::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100021 + */ +StaticGraph100021::StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100021, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100021::~StaticGraph100021() +{ +} + +StaticGraphStatus imageSubGraphTopology100021::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100021::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100021::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100022 + */ +StaticGraph100022::StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100022, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100022::~StaticGraph100022() +{ +} + +StaticGraphStatus imageSubGraphTopology100022::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100022::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100022::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100023 + */ +StaticGraph100023::StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100023, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100023::~StaticGraph100023() +{ +} + +StaticGraphStatus imageSubGraphTopology100023::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100023::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100023::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[19]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[24]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[25]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[26]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100024 + */ +StaticGraph100024::StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100024, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 8; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100024::~StaticGraph100024() +{ +} + +StaticGraphStatus imageSubGraphTopology100024::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[6]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 8; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100040 + */ +StaticGraph100040::StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100040, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100040::~StaticGraph100040() +{ +} + +StaticGraphStatus imageSubGraphTopology100040::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[9]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100041 + */ +StaticGraph100041::StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100041, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100041::~StaticGraph100041() +{ +} + +StaticGraphStatus imageSubGraphTopology100041::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[8]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100042 + */ +StaticGraph100042::StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100042, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100042::~StaticGraph100042() +{ +} + +StaticGraphStatus imageSubGraphTopology100042::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100027 + */ +StaticGraph100027::StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100027, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100027::~StaticGraph100027() +{ +} + +StaticGraphStatus imageSubGraphTopology100027::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100028 + */ +StaticGraph100028::StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100028, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100028::~StaticGraph100028() +{ +} + +StaticGraphStatus imageSubGraphTopology100028::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100029 + */ +StaticGraph100029::StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100029, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100029::~StaticGraph100029() +{ +} + +StaticGraphStatus imageSubGraphTopology100029::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100030 + */ +StaticGraph100030::StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100030, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100030::~StaticGraph100030() +{ +} + +StaticGraphStatus imageSubGraphTopology100030::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100031 + */ +StaticGraph100031::StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100031, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100031::~StaticGraph100031() +{ +} + +StaticGraphStatus imageSubGraphTopology100031::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100032 + */ +StaticGraph100032::StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100032, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100032::~StaticGraph100032() +{ +} + +StaticGraphStatus imageSubGraphTopology100032::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100033 + */ +StaticGraph100033::StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100033, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100033::~StaticGraph100033() +{ +} + +StaticGraphStatus imageSubGraphTopology100033::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100034 + */ +StaticGraph100034::StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100034, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100034::~StaticGraph100034() +{ +} + +StaticGraphStatus imageSubGraphTopology100034::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100141 + */ +StaticGraph100141::StaticGraph100141(GraphConfiguration100141* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100141, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100141::~StaticGraph100141() +{ +} + +StaticGraphStatus imageSubGraphTopology100141::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100141::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_bnlm_1_4) and 27 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_xnr_1_4) and 33 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000; // Run kernel ids 37 (ifd_segmap_acm_1_4) and 38 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000000; // Run kernel ids 61 (ifd_segmap_cas_1_4) and 62 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_bc_1_4) and 51 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_tnr_blend_1_4) and 55 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100100 + */ +StaticGraph100100::StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100100, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100100::~StaticGraph100100() +{ +} + +StaticGraphStatus imageSubGraphTopology100100::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100100::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_acm_1_4) and 29 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_cas_1_4) and 37 (smurf_cas_1_0) + } + + lbffBayerNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100101 + */ +StaticGraph100101::StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100101, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100101::~StaticGraph100101() +{ +} + +StaticGraphStatus imageSubGraphTopology100101::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffBayerWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100101::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000; // Run kernel ids 18 (ifd_segmap_bnlm_1_4) and 19 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_xnr_1_4) and 25 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_acm_1_4) and 30 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100102 + */ +StaticGraph100102::StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100102, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100102::~StaticGraph100102() +{ +} + +StaticGraphStatus imageSubGraphTopology100102::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100102::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100157 + */ +StaticGraph100157::StaticGraph100157(GraphConfiguration100157* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100157, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithOpacityOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithOpacityOuterNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithOpacityOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100157::~StaticGraph100157() +{ +} + +StaticGraphStatus imageSubGraphTopology100157::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithOpacity initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithOpacityInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithOpacityInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithOpacityInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithOpacityInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithOpacityOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithOpacityInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerNoGmvWithTnrWithOpacityInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerNoGmvWithTnrWithOpacityInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerNoGmvWithTnrWithOpacityInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100157::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_tnr_bc_1_4) and 36 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000; // Run kernel ids 39 (ifd_segmap_tnr_blend_1_4) and 40 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithOpacityOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100103 + */ +StaticGraph100103::StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100103, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100103::~StaticGraph100103() +{ +} + +StaticGraphStatus imageSubGraphTopology100103::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100103::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100135 + */ +StaticGraph100135::StaticGraph100135(GraphConfiguration100135* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100135, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100135::~StaticGraph100135() +{ +} + +StaticGraphStatus imageSubGraphTopology100135::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100135::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100104 + */ +StaticGraph100104::StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100104, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100104::~StaticGraph100104() +{ +} + +StaticGraphStatus imageSubGraphTopology100104::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100104::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100105 + */ +StaticGraph100105::StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100105, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100105::~StaticGraph100105() +{ +} + +StaticGraphStatus imageSubGraphTopology100105::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100105::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100106 + */ +StaticGraph100106::StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100106, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100106::~StaticGraph100106() +{ +} + +StaticGraphStatus imageSubGraphTopology100106::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100106::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100166 + */ +StaticGraph100166::StaticGraph100166(GraphConfiguration100166* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100166, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100166::~StaticGraph100166() +{ +} + +StaticGraphStatus imageSubGraphTopology100166::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100166::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100107 + */ +StaticGraph100107::StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100107, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100107::~StaticGraph100107() +{ +} + +StaticGraphStatus imageSubGraphTopology100107::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[24]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[27]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100107::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100145 + */ +StaticGraph100145::StaticGraph100145(GraphConfiguration100145* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100145, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[30]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[31]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 32; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swNntmOuterNode->contextId = 4; + _imageSubGraph.swScalerOuterNode->contextId = 5; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100145::~StaticGraph100145() +{ +} + +StaticGraphStatus imageSubGraphTopology100145::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[24]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[27]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100145::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100108 + */ +StaticGraph100108::StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100108, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100108::~StaticGraph100108() +{ +} + +StaticGraphStatus imageSubGraphTopology100108::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100108::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100109 + */ +StaticGraph100109::StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100109, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100109::~StaticGraph100109() +{ +} + +StaticGraphStatus imageSubGraphTopology100109::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100109::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100110 + */ +StaticGraph100110::StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100110, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100110::~StaticGraph100110() +{ +} + +StaticGraphStatus imageSubGraphTopology100110::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100110::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100111 + */ +StaticGraph100111::StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100111, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100111::~StaticGraph100111() +{ +} + +StaticGraphStatus imageSubGraphTopology100111::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100111::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100136 + */ +StaticGraph100136::StaticGraph100136(GraphConfiguration100136* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100136, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100136::~StaticGraph100136() +{ +} + +StaticGraphStatus imageSubGraphTopology100136::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100136::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100200 + */ +StaticGraph100200::StaticGraph100200(GraphConfiguration100200* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100200, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100200::~StaticGraph100200() +{ +} + +StaticGraphStatus imageSubGraphTopology100200::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100200::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100201 + */ +StaticGraph100201::StaticGraph100201(GraphConfiguration100201* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100201, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100201::~StaticGraph100201() +{ +} + +StaticGraphStatus imageSubGraphTopology100201::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100112 + */ +StaticGraph100112::StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100112, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100112::~StaticGraph100112() +{ +} + +StaticGraphStatus imageSubGraphTopology100112::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[14]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100112::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100113 + */ +StaticGraph100113::StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100113, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100113::~StaticGraph100113() +{ +} + +StaticGraphStatus imageSubGraphTopology100113::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[14]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[18]->isActive = (lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100113::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100114 + */ +StaticGraph100114::StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100114, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100114::~StaticGraph100114() +{ +} + +StaticGraphStatus imageSubGraphTopology100114::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[23]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100114::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100146 + */ +StaticGraph100146::StaticGraph100146(GraphConfiguration100146* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100146, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100146::~StaticGraph100146() +{ +} + +StaticGraphStatus imageSubGraphTopology100146::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[23]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100146::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100115 + */ +StaticGraph100115::StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100115, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100115::~StaticGraph100115() +{ +} + +StaticGraphStatus imageSubGraphTopology100115::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[25]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[27]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[26]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[28]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[22]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[23]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[24]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100115::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 (smurf_tnr_blend_1_0) + } + + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100116 + */ +StaticGraph100116::StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100116, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100116::~StaticGraph100116() +{ +} + +StaticGraphStatus imageSubGraphTopology100116::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100116::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100117 + */ +StaticGraph100117::StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100117, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100117::~StaticGraph100117() +{ +} + +StaticGraphStatus imageSubGraphTopology100117::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100117::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100118 + */ +StaticGraph100118::StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100118, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100118::~StaticGraph100118() +{ +} + +StaticGraphStatus imageSubGraphTopology100118::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[19]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[20]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[21]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[25]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[22]->isActive = (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[23]->isActive = (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[24]->isActive = (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100118::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[14]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[15]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100119 + */ +StaticGraph100119::StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100119, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[31]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 32; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100119::~StaticGraph100119() +{ +} + +StaticGraphStatus imageSubGraphTopology100119::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + subGraphLinks[29]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && + subGraphLinks[30]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[21]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[27]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[29]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[28]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[30]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[22]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[24]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[25]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[26]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100119::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[14]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[15]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100120 + */ +StaticGraph100120::StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100120, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100120::~StaticGraph100120() +{ +} + +StaticGraphStatus imageSubGraphTopology100120::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100120::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100121 + */ +StaticGraph100121::StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100121, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 4; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100121::~StaticGraph100121() +{ +} + +StaticGraphStatus imageSubGraphTopology100121::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100121::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[20]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[28]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100122 + */ +StaticGraph100122::StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100122, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[21] = link; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[30] = link; + + link = &_graphLinks[31]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[31] = link; + _image_irSubGraph.links[31] = link; + + for (uint8_t i = 0; i < 32; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100122::~StaticGraph100122() +{ +} + +StaticGraphStatus imageSubGraphTopology100122::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100122::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[31]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[31]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[23]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[28]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[29]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[30]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[31]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[31]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[23]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[28]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[29]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[30]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100123 + */ +StaticGraph100123::StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100123, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[21] = link; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[22] = link; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[23] = link; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[26] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[30] = link; + + link = &_graphLinks[31]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[31] = link; + + link = &_graphLinks[32]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[32] = link; + + link = &_graphLinks[33]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[33] = link; + + link = &_graphLinks[34]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[31] = link; + _image_irSubGraph.links[34] = link; + + link = &_graphLinks[35]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[32] = link; + _image_irSubGraph.links[35] = link; + + link = &_graphLinks[36]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[33] = link; + _image_irSubGraph.links[36] = link; + + for (uint8_t i = 0; i < 37; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 4; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100123::~StaticGraph100123() +{ +} + +StaticGraphStatus imageSubGraphTopology100123::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100123::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[33]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[28]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[29]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[33]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[25]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 34; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[30]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[31]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[32]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[36]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[29]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[30]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[31]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[32]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[36]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[28]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 37; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[33]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[34]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[35]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100127 + */ +StaticGraph100127::StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100127, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100127::~StaticGraph100127() +{ +} + +StaticGraphStatus imageSubGraphTopology100127::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100127::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x30000; // Run kernel ids 16 (ifd_segmap_bnlm_1_4) and 17 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_xnr_1_4) and 23 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_cas_1_4) and 34 (smurf_cas_1_0) + } + + lbffIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100128 + */ +StaticGraph100128::StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100128, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100128::~StaticGraph100128() +{ +} + +StaticGraphStatus imageSubGraphTopology100128::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[13]->isActive = (lbffIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100128::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000; // Run kernel ids 37 (ifd_segmap_cas_1_4) and 38 (smurf_cas_1_0) + } + + lbffIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100129 + */ +StaticGraph100129::StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100129, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100129::~StaticGraph100129() +{ +} + +StaticGraphStatus imageSubGraphTopology100129::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[16]->isActive = (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[17]->isActive = (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100129::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_cas_1_4) and 50 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_tnr_bc_1_4) and 39 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_tnr_blend_1_4) and 43 (smurf_tnr_blend_1_0) + } + + lbffIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100130 + */ +StaticGraph100130::StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100130, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100130::~StaticGraph100130() +{ +} + +StaticGraphStatus imageSubGraphTopology100130::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[17]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100130::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_cas_1_4) and 54 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_tnr_bc_1_4) and 43 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_blend_1_4) and 47 (smurf_tnr_blend_1_0) + } + + lbffIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100131 + */ +StaticGraph100131::StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100131, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100131::~StaticGraph100131() +{ +} + +StaticGraphStatus imageSubGraphTopology100131::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100131::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_cas_1_4) and 42 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100132 + */ +StaticGraph100132::StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100132, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100132::~StaticGraph100132() +{ +} + +StaticGraphStatus imageSubGraphTopology100132::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[19]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[16]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100132::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_cas_1_4) and 46 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100133 + */ +StaticGraph100133::StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100133, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100133::~StaticGraph100133() +{ +} + +StaticGraphStatus imageSubGraphTopology100133::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100133::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100134 + */ +StaticGraph100134::StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100134, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100134::~StaticGraph100134() +{ +} + +StaticGraphStatus imageSubGraphTopology100134::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100134::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_bnlm_1_4) and 27 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_xnr_1_4) and 33 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000; // Run kernel ids 37 (ifd_segmap_acm_1_4) and 38 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000000; // Run kernel ids 61 (ifd_segmap_cas_1_4) and 62 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_bc_1_4) and 51 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_tnr_blend_1_4) and 55 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100235 + */ +StaticGraph100235::StaticGraph100235(GraphConfiguration100235* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100235, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100235::~StaticGraph100235() +{ +} + +StaticGraphStatus imageSubGraphTopology100235::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100236 + */ +StaticGraph100236::StaticGraph100236(GraphConfiguration100236* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100236, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100236::~StaticGraph100236() +{ +} + +StaticGraphStatus imageSubGraphTopology100236::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100202 + */ +StaticGraph100202::StaticGraph100202(GraphConfiguration100202* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100202, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100202::~StaticGraph100202() +{ +} + +StaticGraphStatus imageSubGraphTopology100202::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100203 + */ +StaticGraph100203::StaticGraph100203(GraphConfiguration100203* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100203, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100203::~StaticGraph100203() +{ +} + +StaticGraphStatus imageSubGraphTopology100203::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100279 + */ +StaticGraph100279::StaticGraph100279(GraphConfiguration100279* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100279, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100279::~StaticGraph100279() +{ +} + +StaticGraphStatus imageSubGraphTopology100279::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100280 + */ +StaticGraph100280::StaticGraph100280(GraphConfiguration100280* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100280, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100280::~StaticGraph100280() +{ +} + +StaticGraphStatus imageSubGraphTopology100280::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100281 + */ +StaticGraph100281::StaticGraph100281(GraphConfiguration100281* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100281, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100281::~StaticGraph100281() +{ +} + +StaticGraphStatus imageSubGraphTopology100281::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100204 + */ +StaticGraph100204::StaticGraph100204(GraphConfiguration100204* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100204, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100204::~StaticGraph100204() +{ +} + +StaticGraphStatus imageSubGraphTopology100204::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100205 + */ +StaticGraph100205::StaticGraph100205(GraphConfiguration100205* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100205, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100205::~StaticGraph100205() +{ +} + +StaticGraphStatus imageSubGraphTopology100205::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100206 + */ +StaticGraph100206::StaticGraph100206(GraphConfiguration100206* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100206, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100206::~StaticGraph100206() +{ +} + +StaticGraphStatus imageSubGraphTopology100206::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100266 + */ +StaticGraph100266::StaticGraph100266(GraphConfiguration100266* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100266, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100266::~StaticGraph100266() +{ +} + +StaticGraphStatus imageSubGraphTopology100266::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100207 + */ +StaticGraph100207::StaticGraph100207(GraphConfiguration100207* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100207, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100207::~StaticGraph100207() +{ +} + +StaticGraphStatus imageSubGraphTopology100207::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100267 + */ +StaticGraph100267::StaticGraph100267(GraphConfiguration100267* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100267, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100267::~StaticGraph100267() +{ +} + +StaticGraphStatus imageSubGraphTopology100267::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100208 + */ +StaticGraph100208::StaticGraph100208(GraphConfiguration100208* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100208, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100208::~StaticGraph100208() +{ +} + +StaticGraphStatus imageSubGraphTopology100208::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100209 + */ +StaticGraph100209::StaticGraph100209(GraphConfiguration100209* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100209, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100209::~StaticGraph100209() +{ +} + +StaticGraphStatus imageSubGraphTopology100209::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100210 + */ +StaticGraph100210::StaticGraph100210(GraphConfiguration100210* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100210, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100210::~StaticGraph100210() +{ +} + +StaticGraphStatus imageSubGraphTopology100210::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100211 + */ +StaticGraph100211::StaticGraph100211(GraphConfiguration100211* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100211, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100211::~StaticGraph100211() +{ +} + +StaticGraphStatus imageSubGraphTopology100211::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100245 + */ +StaticGraph100245::StaticGraph100245(GraphConfiguration100245* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100245, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100245::~StaticGraph100245() +{ +} + +StaticGraphStatus imageSubGraphTopology100245::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100212 + */ +StaticGraph100212::StaticGraph100212(GraphConfiguration100212* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100212, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100212::~StaticGraph100212() +{ +} + +StaticGraphStatus imageSubGraphTopology100212::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100213 + */ +StaticGraph100213::StaticGraph100213(GraphConfiguration100213* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100213, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100213::~StaticGraph100213() +{ +} + +StaticGraphStatus imageSubGraphTopology100213::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100214 + */ +StaticGraph100214::StaticGraph100214(GraphConfiguration100214* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100214, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100214::~StaticGraph100214() +{ +} + +StaticGraphStatus imageSubGraphTopology100214::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100215 + */ +StaticGraph100215::StaticGraph100215(GraphConfiguration100215* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100215, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100215::~StaticGraph100215() +{ +} + +StaticGraphStatus imageSubGraphTopology100215::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100216 + */ +StaticGraph100216::StaticGraph100216(GraphConfiguration100216* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100216, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100216::~StaticGraph100216() +{ +} + +StaticGraphStatus imageSubGraphTopology100216::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100217 + */ +StaticGraph100217::StaticGraph100217(GraphConfiguration100217* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100217, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100217::~StaticGraph100217() +{ +} + +StaticGraphStatus imageSubGraphTopology100217::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100218 + */ +StaticGraph100218::StaticGraph100218(GraphConfiguration100218* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100218, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100218::~StaticGraph100218() +{ +} + +StaticGraphStatus imageSubGraphTopology100218::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100219 + */ +StaticGraph100219::StaticGraph100219(GraphConfiguration100219* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100219, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100219::~StaticGraph100219() +{ +} + +StaticGraphStatus imageSubGraphTopology100219::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[16]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100220 + */ +StaticGraph100220::StaticGraph100220(GraphConfiguration100220* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100220, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100220::~StaticGraph100220() +{ +} + +StaticGraphStatus imageSubGraphTopology100220::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100220::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100220::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100221 + */ +StaticGraph100221::StaticGraph100221(GraphConfiguration100221* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100221, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100221::~StaticGraph100221() +{ +} + +StaticGraphStatus imageSubGraphTopology100221::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100221::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100221::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100222 + */ +StaticGraph100222::StaticGraph100222(GraphConfiguration100222* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100222, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100222::~StaticGraph100222() +{ +} + +StaticGraphStatus imageSubGraphTopology100222::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100222::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100222::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100223 + */ +StaticGraph100223::StaticGraph100223(GraphConfiguration100223* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100223, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[29] = link; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100223::~StaticGraph100223() +{ +} + +StaticGraphStatus imageSubGraphTopology100223::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100223::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[24]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[25]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100223::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[29]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[29]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[21]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[26]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[27]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[28]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100224 + */ +StaticGraph100224::StaticGraph100224(GraphConfiguration100224* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100224, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 10; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100224::~StaticGraph100224() +{ +} + +StaticGraphStatus imageSubGraphTopology100224::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[6]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 8; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100240 + */ +StaticGraph100240::StaticGraph100240(GraphConfiguration100240* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100240, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100240::~StaticGraph100240() +{ +} + +StaticGraphStatus imageSubGraphTopology100240::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[9]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100241 + */ +StaticGraph100241::StaticGraph100241(GraphConfiguration100241* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100241, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100241::~StaticGraph100241() +{ +} + +StaticGraphStatus imageSubGraphTopology100241::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[8]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100242 + */ +StaticGraph100242::StaticGraph100242(GraphConfiguration100242* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100242, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100242::~StaticGraph100242() +{ +} + +StaticGraphStatus imageSubGraphTopology100242::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100227 + */ +StaticGraph100227::StaticGraph100227(GraphConfiguration100227* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100227, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100227::~StaticGraph100227() +{ +} + +StaticGraphStatus imageSubGraphTopology100227::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100228 + */ +StaticGraph100228::StaticGraph100228(GraphConfiguration100228* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100228, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100228::~StaticGraph100228() +{ +} + +StaticGraphStatus imageSubGraphTopology100228::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100229 + */ +StaticGraph100229::StaticGraph100229(GraphConfiguration100229* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100229, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100229::~StaticGraph100229() +{ +} + +StaticGraphStatus imageSubGraphTopology100229::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100230 + */ +StaticGraph100230::StaticGraph100230(GraphConfiguration100230* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100230, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100230::~StaticGraph100230() +{ +} + +StaticGraphStatus imageSubGraphTopology100230::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100231 + */ +StaticGraph100231::StaticGraph100231(GraphConfiguration100231* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100231, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100231::~StaticGraph100231() +{ +} + +StaticGraphStatus imageSubGraphTopology100231::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100232 + */ +StaticGraph100232::StaticGraph100232(GraphConfiguration100232* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100232, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100232::~StaticGraph100232() +{ +} + +StaticGraphStatus imageSubGraphTopology100232::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100233 + */ +StaticGraph100233::StaticGraph100233(GraphConfiguration100233* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100233, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100233::~StaticGraph100233() +{ +} + +StaticGraphStatus imageSubGraphTopology100233::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100234 + */ +StaticGraph100234::StaticGraph100234(GraphConfiguration100234* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100234, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100234::~StaticGraph100234() +{ +} + +StaticGraphStatus imageSubGraphTopology100234::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[14]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[15]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100026 + */ +StaticGraph100026::StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100026, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 2; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysOuterNode = &_isysOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysOuterNode->contextId = 0; +} +StaticGraph100026::~StaticGraph100026() +{ +} +/* + * Graph 100059 + */ +StaticGraph100059::StaticGraph100059(GraphConfiguration100059* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100059, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100059::~StaticGraph100059() +{ +} +/* + * Graph 100035 + */ +StaticGraph100035::StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100035, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolOuterNode = &_isysDolOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolOuterNode->contextId = 0; +} +StaticGraph100035::~StaticGraph100035() +{ +} +/* + * Graph 100036 + */ +StaticGraph100036::StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100036, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2OuterNode->contextId = 0; +} +StaticGraph100036::~StaticGraph100036() +{ +} +/* + * Graph 100037 + */ +StaticGraph100037::StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100037, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100037::~StaticGraph100037() +{ +} +/* + * Graph 100058 + */ +StaticGraph100058::StaticGraph100058(GraphConfiguration100058* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100058, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100058::~StaticGraph100058() +{ +} +/* + * Graph 100038 + */ +StaticGraph100038::StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100038, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolWithCvOuterNode->contextId = 0; +} +StaticGraph100038::~StaticGraph100038() +{ +} +/* + * Graph 100039 + */ +StaticGraph100039::StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100039, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; +} +StaticGraph100039::~StaticGraph100039() +{ +} diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.h new file mode 100644 index 0000000..0e0e0a7 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.h @@ -0,0 +1,9306 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_H +#define STATIC_GRAPH_H + +#include +#include +#include +#include "Ipu8StaticGraphTypesAutogen.h" +#include "Ipu8StaticGraphBinaryAutogen.h" + +#define SUPPORT_KEY_RESOLUTIONS 0 + +#define SUPPORT_FRAGMENTS 1 + +enum InnerNodeOption +{ + None = 0, + noIr = (1 << 1), + no3A = (1 << 2), + noMp = (1 << 3), + noDp = (1 << 4), + noPdaf = (1 << 5), +}; +typedef int32_t InnerNodeOptionsFlags; + +struct SubGraphPublicInnerNodeConfiguration { + bool no3A = false; + bool noMp = false; + bool noDp = false; + bool noPdaf = false; +}; + +struct KernelFragments { + StaticGraphFragmentDesc fragmentDescriptors[4]; +}; + +class OuterNode { +public: + /** + * \brief resourceId - represents the physical ID of the node, e.g. cb_id for CB node. + */ + uint8_t resourceId = 0; + + /** + * \brief contextId - represents the logical Id of the node according to the use-case. + * Same physical nodes in given graph topology will have a different contextId + */ + uint8_t contextId = 0; + NodeTypes type = NodeTypes::Cb; + HwBitmaps bitmaps; + StaticGraphNodeKernels nodeKernels = {}; + + uint8_t numberOfFragments = 0; + HwBitmaps bitmapsNotVanished = {}; + uint64_t disabledRunKernelsBitmapNotVanished[2] = {}; + VanishOption fragmentVanishStatus[4] = {}; + uint16_t* kernelListInConfigOrder = {}; + OuterNode() {} + ~OuterNode(); + + void Init(uint8_t nodeResourceId, + NodeTypes nodeType, + uint32_t kernelCount, + uint32_t operationMode, + uint32_t streamId, + uint8_t nodeNumberOfFragments); + + uint8_t GetNumberOfFragments(); + virtual void configVanishStatus(VanishOption vanishStatus); + const uint16_t* getRunKernelConfigOrder(); + + void SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]); + +protected: + void InitRunKernels(uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], StaticGraphKernelRes* resolutionInfos, uint64_t kernelsResolutionHistoryGroupBitmap[2], uint64_t kernelFragmentDescriptorGroupBitmap[2], StaticGraphKernelRes* resolutionHistories, StaticGraphKernelBppConfiguration* bppInfos, uint8_t* systemApisSizes, uint8_t* systemApiData, KernelFragments* fragmentDescriptors, uint16_t* runKernelConfigOrder); +}; + +struct GraphLink { + bool isActive = true; + + GraphElementType src; + OuterNode* srcNode = nullptr; + GraphElementType dest; + OuterNode* destNode = nullptr; + + uint8_t srcTerminalId = 0; + uint8_t destTerminalId = 0; + + FormatType format; + LinkType type; + uint8_t frameDelay = 0; + + StaticGraphLinkConfiguration* linkConfiguration = nullptr; + StaticGraphLinkCompressionConfiguration* linkCompressionConfiguration = nullptr; +}; + +struct SubGraphInnerNodeConfiguration +{ + SubGraphPublicInnerNodeConfiguration* imageInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* irInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* rawInnerOptions = nullptr; +}; + +class GraphTopology { +public: + GraphLink** links = nullptr; + int32_t numOfLinks = 0; + + GraphTopology(GraphLink** links, int32_t numOfLinks, VirtualSinkMapping* sinkMappingConfiguration); + virtual StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration); + bool isLinkVanished(GraphLink* link); + +protected: + VirtualSinkMapping* _sinkMappingConfiguration = nullptr; + static InnerNodeOptionsFlags GetInnerOptions(SubGraphPublicInnerNodeConfiguration* publicInnerOptions); + +}; + +class IStaticGraphConfig +{ +public: + virtual ~IStaticGraphConfig(){} + IStaticGraphConfig(SensorMode* selectedSensorMode, VirtualSinkMapping* sinkMappingConfiguration, int32_t graphId, int32_t selectedSettingsId); + StaticGraphStatus getGraphTopology(GraphTopology** topology); + StaticGraphStatus getSensorMode(SensorMode** sensorMode); + StaticGraphStatus getGraphId(int32_t* id); + StaticGraphStatus getSettingsId(int32_t* id); + StaticGraphStatus getVirtualSinkConnection(VirtualSink& virtualSink, HwSink* hwSink); + +protected: + SensorMode* _selectedSensorMode = nullptr; + GraphTopology* _selectedGraphTopology = nullptr; + VirtualSinkMapping* _sinkMappingConfiguration = &_selectedSinkMappingConfiguration; +private: + int32_t _graphId; + int32_t _settingsId; + VirtualSinkMapping _selectedSinkMappingConfiguration; +}; + +#pragma pack(push, 4) + +struct IsysOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[20]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[17]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[34]; + uint8_t systemApiConfiguration[2154]; +}; + +struct LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2846]; +}; + +struct SwGdcOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3484]; +}; + +struct LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4176]; +}; + +struct IsysWithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[4]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[3]; + StaticGraphKernelRes resolutionHistories[4]; + StaticGraphKernelBppConfiguration bppInfos[4]; + uint8_t systemApiConfiguration[54]; +}; + +struct SwSegnetOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + uint32_t streamId = 0; + uint8_t tuningMode = 0; +}; + +struct LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5496]; +}; + +struct SwScalerOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; + uint8_t systemApiConfiguration[5]; +}; + +struct SwNntmOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; + uint8_t systemApiConfiguration[5]; +}; + +struct LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[47]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[37]; + StaticGraphKernelRes resolutionHistories[35]; + StaticGraphKernelBppConfiguration bppInfos[58]; + uint8_t systemApiConfiguration[4804]; +}; + +struct IsysPdaf2WithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5276]; +}; + +struct LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[55]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[45]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[5968]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5056]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[52]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[42]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[63]; + uint8_t systemApiConfiguration[5496]; +}; + +struct IsysPdaf2OuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2626]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[28]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3318]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[3956]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4648]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[55]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[45]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[5968]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2406]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3098]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3736]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4428]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5748]; +}; + +struct IsysDolOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2599]; +}; + +struct LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3291]; +}; + +struct LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3929]; +}; + +struct LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4621]; +}; + +struct LbffDolSmoothOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[3]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[8]; + uint8_t systemApiConfiguration[476]; +}; + +struct LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[16]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2819]; +}; + +struct LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[20]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3511]; +}; + +struct LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[22]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4149]; +}; + +struct LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4841]; +}; + +struct LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[36]; + uint8_t systemApiConfiguration[2594]; +}; + +struct LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[32]; + uint8_t systemApiConfiguration[2134]; +}; + +struct LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[40]; + uint8_t systemApiConfiguration[3286]; +}; + +struct LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[3924]; +}; + +struct LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3464]; +}; + +struct LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[52]; + uint8_t systemApiConfiguration[4616]; +}; + +struct LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[33]; + uint8_t systemApiConfiguration[2154]; +}; + +struct LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2846]; +}; + +struct LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3484]; +}; + +struct LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4176]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[25]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[22]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[39]; + uint8_t systemApiConfiguration[2846]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[29]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[26]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[43]; + uint8_t systemApiConfiguration[3538]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4176]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[55]; + uint8_t systemApiConfiguration[4868]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[56]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[46]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[67]; + uint8_t systemApiConfiguration[6188]; +}; + +struct LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3034]; +}; + +struct LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3726]; +}; + +struct LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[3924]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3506]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4198]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3286]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3978]; +}; + +struct IsysDolWithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3479]; +}; + +struct LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4171]; +}; + +struct LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5249]; +}; + +struct LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5941]; +}; + +struct LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3699]; +}; + +struct LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[31]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4391]; +}; + +struct LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[38]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5469]; +}; + +struct LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[42]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[6161]; +}; + +struct LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3474]; +}; + +struct LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[4166]; +}; + +struct LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[60]; + uint8_t systemApiConfiguration[5244]; +}; + +struct LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[64]; + uint8_t systemApiConfiguration[5936]; +}; + +struct LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[22]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[39]; + uint8_t systemApiConfiguration[2814]; +}; + +struct LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[26]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[43]; + uint8_t systemApiConfiguration[3506]; +}; + +struct LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[43]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[55]; + uint8_t systemApiConfiguration[4584]; +}; + +struct LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[47]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[38]; + StaticGraphKernelRes resolutionHistories[36]; + StaticGraphKernelBppConfiguration bppInfos[59]; + uint8_t systemApiConfiguration[5276]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[47]; + uint8_t systemApiConfiguration[3726]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4418]; +}; + +struct WithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[6]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[5]; + StaticGraphKernelRes resolutionHistories[6]; + StaticGraphKernelBppConfiguration bppInfos[6]; + uint8_t systemApiConfiguration[54]; +}; + +struct GraphConfiguration100000 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100001 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100002 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100003 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100137 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100079 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100080 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100138 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100142 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100162 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100143 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100144 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100081 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100004 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100005 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100006 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100066 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100007 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100067 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100139 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[31]; +}; + +struct GraphConfiguration100169 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100008 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[10]; +}; + +struct GraphConfiguration100009 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100010 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100011 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100140 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100045 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100012 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100013 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100014 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100015 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100016 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100017 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100018 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100019 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100020 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100021 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100022 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100023 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100024 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[8]; +}; + +struct GraphConfiguration100040 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100041 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100042 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100027 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100028 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100029 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100030 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100031 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100032 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100033 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100034 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100141 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100100 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100101 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100102 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100157 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration lbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100103 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100135 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100104 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100105 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100106 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100166 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100107 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100145 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[32]; +}; + +struct GraphConfiguration100108 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100109 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100110 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100111 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100136 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100200 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100201 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100112 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100113 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100114 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100146 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100115 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100116 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100117 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100118 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100119 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[32]; +}; + +struct GraphConfiguration100120 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100121 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100122 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[32]; +}; + +struct GraphConfiguration100123 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[37]; +}; + +struct GraphConfiguration100127 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100128 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100129 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100130 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100131 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100132 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100133 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100134 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100235 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100236 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100202 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100203 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100279 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100280 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100281 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100204 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100205 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100206 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100266 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100207 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100267 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100208 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100209 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100210 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100211 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100245 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100212 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100213 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100214 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100215 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100216 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100217 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100218 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100219 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100220 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100221 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100222 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100223 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100224 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[10]; +}; + +struct GraphConfiguration100240 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100241 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100242 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100227 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100228 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100229 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100230 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100231 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100232 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100233 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100234 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100026 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[2]; +}; + +struct GraphConfiguration100059 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100035 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100036 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100037 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100058 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100038 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; + +struct GraphConfiguration100039 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; +#pragma pack(pop) + +class IsysOuterNode : public OuterNode +{ +public: + IsysOuterNode(): OuterNode(){} + void Init(IsysOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwGdcOuterNode : public OuterNode +{ +public: + SwGdcOuterNode(): OuterNode(){} + void Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysWithCvOuterNode : public OuterNode +{ +public: + IsysWithCvOuterNode(): OuterNode(){} + void Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwSegnetOuterNode : public OuterNode +{ +public: + SwSegnetOuterNode(): OuterNode(){} + void Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwScalerOuterNode : public OuterNode +{ +public: + SwScalerOuterNode(): OuterNode(){} + void Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwNntmOuterNode : public OuterNode +{ +public: + SwNntmOuterNode(): OuterNode(){} + void Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysPdaf2WithCvOuterNode : public OuterNode +{ +public: + IsysPdaf2WithCvOuterNode(): OuterNode(){} + void Init(IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysPdaf2OuterNode : public OuterNode +{ +public: + IsysPdaf2OuterNode(): OuterNode(){} + void Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysDolOuterNode : public OuterNode +{ +public: + IsysDolOuterNode(): OuterNode(){} + void Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDolSmoothOuterNode : public OuterNode +{ +public: + LbffDolSmoothOuterNode(): OuterNode(){} + void Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrIrNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrIrNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvWithTnrWithOpacityOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvWithTnrWithOpacityOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysDolWithCvOuterNode : public OuterNode +{ +public: + IsysDolWithCvOuterNode(): OuterNode(){} + void Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class WithCvOuterNode : public OuterNode +{ +public: + WithCvOuterNode(): OuterNode(){} + void Init(WithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; + +class imageSubGraphTopology100000 : public GraphTopology { + +public: + imageSubGraphTopology100000(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; + +}; + +class StaticGraph100000 : public IStaticGraphConfig +{ +public: + StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100000(); + static const uint32_t hashCode = 659422379; // autogenerated + +private: + // Configuration + GraphConfiguration100000 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100000 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100001 : public GraphTopology { + +public: + imageSubGraphTopology100001(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100001 : public IStaticGraphConfig +{ +public: + StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100001(); + static const uint32_t hashCode = 1362910222; // autogenerated + +private: + // Configuration + GraphConfiguration100001 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100001 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100002 : public GraphTopology { + +public: + imageSubGraphTopology100002(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100002 : public IStaticGraphConfig +{ +public: + StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100002(); + static const uint32_t hashCode = 234836739; // autogenerated + +private: + // Configuration + GraphConfiguration100002 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100002 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100003 : public GraphTopology { + +public: + imageSubGraphTopology100003(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100003 : public IStaticGraphConfig +{ +public: + StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100003(); + static const uint32_t hashCode = 4056809410; // autogenerated + +private: + // Configuration + GraphConfiguration100003 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100003 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100137 : public GraphTopology { + +public: + imageSubGraphTopology100137(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvWithTnrWithSapOuterNode* lbffBayerWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100137 : public IStaticGraphConfig +{ +public: + StaticGraph100137(GraphConfiguration100137* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100137(); + static const uint32_t hashCode = 1162208336; // autogenerated + +private: + // Configuration + GraphConfiguration100137 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvWithTnrWithSapOuterNode _lbffBayerWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100137 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100079 : public GraphTopology { + +public: + imageSubGraphTopology100079(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100079 : public IStaticGraphConfig +{ +public: + StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100079(); + static const uint32_t hashCode = 532659637; // autogenerated + +private: + // Configuration + GraphConfiguration100079 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100079 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100080 : public GraphTopology { + +public: + imageSubGraphTopology100080(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100080 : public IStaticGraphConfig +{ +public: + StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100080(); + static const uint32_t hashCode = 2414017975; // autogenerated + +private: + // Configuration + GraphConfiguration100080 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100080 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100138 : public GraphTopology { + +public: + imageSubGraphTopology100138(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100138 : public IStaticGraphConfig +{ +public: + StaticGraph100138(GraphConfiguration100138* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100138(); + static const uint32_t hashCode = 3346954776; // autogenerated + +private: + // Configuration + GraphConfiguration100138 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100138 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100142 : public GraphTopology { + +public: + imageSubGraphTopology100142(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100142 : public IStaticGraphConfig +{ +public: + StaticGraph100142(GraphConfiguration100142* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100142(); + static const uint32_t hashCode = 2439817970; // autogenerated + +private: + // Configuration + GraphConfiguration100142 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100142 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100162 : public GraphTopology { + +public: + imageSubGraphTopology100162(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithTnrWithSapOuterNode* lbffBayerPdaf2WithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100162 : public IStaticGraphConfig +{ +public: + StaticGraph100162(GraphConfiguration100162* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100162(); + static const uint32_t hashCode = 400260450; // autogenerated + +private: + // Configuration + GraphConfiguration100162 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithTnrWithSapOuterNode _lbffBayerPdaf2WithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100162 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100143 : public GraphTopology { + +public: + imageSubGraphTopology100143(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100143 : public IStaticGraphConfig +{ +public: + StaticGraph100143(GraphConfiguration100143* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100143(); + static const uint32_t hashCode = 1997307496; // autogenerated + +private: + // Configuration + GraphConfiguration100143 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100143 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100144 : public GraphTopology { + +public: + imageSubGraphTopology100144(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100144 : public IStaticGraphConfig +{ +public: + StaticGraph100144(GraphConfiguration100144* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100144(); + static const uint32_t hashCode = 297378060; // autogenerated + +private: + // Configuration + GraphConfiguration100144 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100144 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100081 : public GraphTopology { + +public: + imageSubGraphTopology100081(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100081 : public IStaticGraphConfig +{ +public: + StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100081(); + static const uint32_t hashCode = 250406055; // autogenerated + +private: + // Configuration + GraphConfiguration100081 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100081 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100004 : public GraphTopology { + +public: + imageSubGraphTopology100004(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100004 : public IStaticGraphConfig +{ +public: + StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100004(); + static const uint32_t hashCode = 1893639437; // autogenerated + +private: + // Configuration + GraphConfiguration100004 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100004 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100005 : public GraphTopology { + +public: + imageSubGraphTopology100005(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100005 : public IStaticGraphConfig +{ +public: + StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100005(); + static const uint32_t hashCode = 289246692; // autogenerated + +private: + // Configuration + GraphConfiguration100005 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100005 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100006 : public GraphTopology { + +public: + imageSubGraphTopology100006(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class StaticGraph100006 : public IStaticGraphConfig +{ +public: + StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100006(); + static const uint32_t hashCode = 1235256317; // autogenerated + +private: + // Configuration + GraphConfiguration100006 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100006 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100066 : public GraphTopology { + +public: + imageSubGraphTopology100066(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100066 : public IStaticGraphConfig +{ +public: + StaticGraph100066(GraphConfiguration100066* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100066(); + static const uint32_t hashCode = 3796248179; // autogenerated + +private: + // Configuration + GraphConfiguration100066 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100066 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100007 : public GraphTopology { + +public: + imageSubGraphTopology100007(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100007 : public IStaticGraphConfig +{ +public: + StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100007(); + static const uint32_t hashCode = 2306636736; // autogenerated + +private: + // Configuration + GraphConfiguration100007 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100007 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100067 : public GraphTopology { + +public: + imageSubGraphTopology100067(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +}; + +class StaticGraph100067 : public IStaticGraphConfig +{ +public: + StaticGraph100067(GraphConfiguration100067* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100067(); + static const uint32_t hashCode = 330767106; // autogenerated + +private: + // Configuration + GraphConfiguration100067 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100067 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100139 : public GraphTopology { + +public: + imageSubGraphTopology100139(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100139 : public IStaticGraphConfig +{ +public: + StaticGraph100139(GraphConfiguration100139* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100139(); + static const uint32_t hashCode = 2072599578; // autogenerated + +private: + // Configuration + GraphConfiguration100139 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100139 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[31]; +}; + +class imageSubGraphTopology100169 : public GraphTopology { + +public: + imageSubGraphTopology100169(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithTnrWithSapOuterNode* lbffBayerPdaf2WithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100169 : public IStaticGraphConfig +{ +public: + StaticGraph100169(GraphConfiguration100169* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100169(); + static const uint32_t hashCode = 400260450; // autogenerated + +private: + // Configuration + GraphConfiguration100169 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithTnrWithSapOuterNode _lbffBayerPdaf2WithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100169 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100008 : public GraphTopology { + +public: + imageSubGraphTopology100008(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; + +}; + +class StaticGraph100008 : public IStaticGraphConfig +{ +public: + StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100008(); + static const uint32_t hashCode = 2097767335; // autogenerated + +private: + // Configuration + GraphConfiguration100008 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100008 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[10]; +}; + +class imageSubGraphTopology100009 : public GraphTopology { + +public: + imageSubGraphTopology100009(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class StaticGraph100009 : public IStaticGraphConfig +{ +public: + StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100009(); + static const uint32_t hashCode = 2902802486; // autogenerated + +private: + // Configuration + GraphConfiguration100009 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100009 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100010 : public GraphTopology { + +public: + imageSubGraphTopology100010(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100010 : public IStaticGraphConfig +{ +public: + StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100010(); + static const uint32_t hashCode = 1235970399; // autogenerated + +private: + // Configuration + GraphConfiguration100010 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100010 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100011 : public GraphTopology { + +public: + imageSubGraphTopology100011(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class StaticGraph100011 : public IStaticGraphConfig +{ +public: + StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100011(); + static const uint32_t hashCode = 1386704474; // autogenerated + +private: + // Configuration + GraphConfiguration100011 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100011 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100140 : public GraphTopology { + +public: + imageSubGraphTopology100140(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100140 : public IStaticGraphConfig +{ +public: + StaticGraph100140(GraphConfiguration100140* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100140(); + static const uint32_t hashCode = 2598536544; // autogenerated + +private: + // Configuration + GraphConfiguration100140 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100140 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100045 : public GraphTopology { + +public: + imageSubGraphTopology100045(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class StaticGraph100045 : public IStaticGraphConfig +{ +public: + StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100045(); + static const uint32_t hashCode = 2987627097; // autogenerated + +private: + // Configuration + GraphConfiguration100045 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100045 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100012 : public GraphTopology { + +public: + imageSubGraphTopology100012(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode* lbffDol2InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100012 : public IStaticGraphConfig +{ +public: + StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100012(); + static const uint32_t hashCode = 1929687541; // autogenerated + +private: + // Configuration + GraphConfiguration100012 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode _lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100012 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100013 : public GraphTopology { + +public: + imageSubGraphTopology100013(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode* lbffDol2InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100013 : public IStaticGraphConfig +{ +public: + StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100013(); + static const uint32_t hashCode = 3222759362; // autogenerated + +private: + // Configuration + GraphConfiguration100013 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode _lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100013 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100014 : public GraphTopology { + +public: + imageSubGraphTopology100014(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode* lbffDol2InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100014 : public IStaticGraphConfig +{ +public: + StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100014(); + static const uint32_t hashCode = 461825829; // autogenerated + +private: + // Configuration + GraphConfiguration100014 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode _lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100014 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100015 : public GraphTopology { + +public: + imageSubGraphTopology100015(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode* lbffDol2InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100015 : public IStaticGraphConfig +{ +public: + StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100015(); + static const uint32_t hashCode = 3628721894; // autogenerated + +private: + // Configuration + GraphConfiguration100015 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode _lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100015 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100016 : public GraphTopology { + +public: + imageSubGraphTopology100016(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode* lbffDol3InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100016 : public IStaticGraphConfig +{ +public: + StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100016(); + static const uint32_t hashCode = 3353314188; // autogenerated + +private: + // Configuration + GraphConfiguration100016 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode _lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100016 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100017 : public GraphTopology { + +public: + imageSubGraphTopology100017(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode* lbffDol3InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100017 : public IStaticGraphConfig +{ +public: + StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100017(); + static const uint32_t hashCode = 3319097463; // autogenerated + +private: + // Configuration + GraphConfiguration100017 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode _lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100017 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100018 : public GraphTopology { + +public: + imageSubGraphTopology100018(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode* lbffDol3InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100018 : public IStaticGraphConfig +{ +public: + StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100018(); + static const uint32_t hashCode = 2045302344; // autogenerated + +private: + // Configuration + GraphConfiguration100018 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode _lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100018 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100019 : public GraphTopology { + +public: + imageSubGraphTopology100019(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode* lbffDol3InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100019 : public IStaticGraphConfig +{ +public: + StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100019(); + static const uint32_t hashCode = 360993599; // autogenerated + +private: + // Configuration + GraphConfiguration100019 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode _lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100019 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100020 : public GraphTopology { + +public: + imageSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; + +}; + +class irSubGraphTopology100020 : public GraphTopology { + +public: + irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class image_irSubGraphTopology100020 : public GraphTopology { + +public: + image_irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100020 : public IStaticGraphConfig +{ +public: + StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100020(); + static const uint32_t hashCode = 3832894342; // autogenerated + +private: + // Configuration + GraphConfiguration100020 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrNoGmvNoTnrNoSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100020 _imageSubGraph; + irSubGraphTopology100020 _irSubGraph; + image_irSubGraphTopology100020 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100021 : public GraphTopology { + +public: + imageSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class irSubGraphTopology100021 : public GraphTopology { + +public: + irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class image_irSubGraphTopology100021 : public GraphTopology { + +public: + image_irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100021 : public IStaticGraphConfig +{ +public: + StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100021(); + static const uint32_t hashCode = 1842368291; // autogenerated + +private: + // Configuration + GraphConfiguration100021 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvNoTnrNoSapOuterNode _lbffRgbIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100021 _imageSubGraph; + irSubGraphTopology100021 _irSubGraph; + image_irSubGraphTopology100021 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100022 : public GraphTopology { + +public: + imageSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class irSubGraphTopology100022 : public GraphTopology { + +public: + irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +}; + +class image_irSubGraphTopology100022 : public GraphTopology { + +public: + image_irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +}; + +class StaticGraph100022 : public IStaticGraphConfig +{ +public: + StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100022(); + static const uint32_t hashCode = 1716954062; // autogenerated + +private: + // Configuration + GraphConfiguration100022 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrNoGmvWithTnrNoSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100022 _imageSubGraph; + irSubGraphTopology100022 _irSubGraph; + image_irSubGraphTopology100022 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100023 : public GraphTopology { + +public: + imageSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class irSubGraphTopology100023 : public GraphTopology { + +public: + irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class image_irSubGraphTopology100023 : public GraphTopology { + +public: + image_irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +}; + +class StaticGraph100023 : public IStaticGraphConfig +{ +public: + StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100023(); + static const uint32_t hashCode = 3714048611; // autogenerated + +private: + // Configuration + GraphConfiguration100023 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvWithTnrNoSapOuterNode _lbffRgbIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100023 _imageSubGraph; + irSubGraphTopology100023 _irSubGraph; + image_irSubGraphTopology100023 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100024 : public GraphTopology { + +public: + imageSubGraphTopology100024(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 8, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[8]; + +}; + +class StaticGraph100024 : public IStaticGraphConfig +{ +public: + StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100024(); + static const uint32_t hashCode = 1924685938; // autogenerated + +private: + // Configuration + GraphConfiguration100024 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100024 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[8]; +}; + +class imageSubGraphTopology100040 : public GraphTopology { + +public: + imageSubGraphTopology100040(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100040 : public IStaticGraphConfig +{ +public: + StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100040(); + static const uint32_t hashCode = 3034514411; // autogenerated + +private: + // Configuration + GraphConfiguration100040 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100040 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100041 : public GraphTopology { + +public: + imageSubGraphTopology100041(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100041 : public IStaticGraphConfig +{ +public: + StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100041(); + static const uint32_t hashCode = 3140987267; // autogenerated + +private: + // Configuration + GraphConfiguration100041 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100041 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100042 : public GraphTopology { + +public: + imageSubGraphTopology100042(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100042 : public IStaticGraphConfig +{ +public: + StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100042(); + static const uint32_t hashCode = 2085545078; // autogenerated + +private: + // Configuration + GraphConfiguration100042 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100042 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100027 : public GraphTopology { + +public: + imageSubGraphTopology100027(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvNoTnrNoSapOuterNode* lbffIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; + +}; + +class StaticGraph100027 : public IStaticGraphConfig +{ +public: + StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100027(); + static const uint32_t hashCode = 486131511; // autogenerated + +private: + // Configuration + GraphConfiguration100027 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvNoTnrNoSapOuterNode _lbffIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100027 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100028 : public GraphTopology { + +public: + imageSubGraphTopology100028(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvNoTnrNoSapOuterNode* lbffIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100028 : public IStaticGraphConfig +{ +public: + StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100028(); + static const uint32_t hashCode = 1301349394; // autogenerated + +private: + // Configuration + GraphConfiguration100028 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvNoTnrNoSapOuterNode _lbffIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100028 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100029 : public GraphTopology { + +public: + imageSubGraphTopology100029(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvWithTnrNoSapOuterNode* lbffIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100029 : public IStaticGraphConfig +{ +public: + StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100029(); + static const uint32_t hashCode = 549041199; // autogenerated + +private: + // Configuration + GraphConfiguration100029 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvWithTnrNoSapOuterNode _lbffIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100029 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100030 : public GraphTopology { + +public: + imageSubGraphTopology100030(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvWithTnrNoSapOuterNode* lbffIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100030 : public IStaticGraphConfig +{ +public: + StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100030(); + static const uint32_t hashCode = 1796985254; // autogenerated + +private: + // Configuration + GraphConfiguration100030 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvWithTnrNoSapOuterNode _lbffIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100030 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100031 : public GraphTopology { + +public: + imageSubGraphTopology100031(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100031 : public IStaticGraphConfig +{ +public: + StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100031(); + static const uint32_t hashCode = 2736278879; // autogenerated + +private: + // Configuration + GraphConfiguration100031 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100031 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100032 : public GraphTopology { + +public: + imageSubGraphTopology100032(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100032 : public IStaticGraphConfig +{ +public: + StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100032(); + static const uint32_t hashCode = 4125323650; // autogenerated + +private: + // Configuration + GraphConfiguration100032 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100032 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100033 : public GraphTopology { + +public: + imageSubGraphTopology100033(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100033 : public IStaticGraphConfig +{ +public: + StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100033(); + static const uint32_t hashCode = 3790329975; // autogenerated + +private: + // Configuration + GraphConfiguration100033 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100033 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100034 : public GraphTopology { + +public: + imageSubGraphTopology100034(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100034 : public IStaticGraphConfig +{ +public: + StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100034(); + static const uint32_t hashCode = 3501256470; // autogenerated + +private: + // Configuration + GraphConfiguration100034 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100034 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100141 : public GraphTopology { + +public: + imageSubGraphTopology100141(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100141 : public IStaticGraphConfig +{ +public: + StaticGraph100141(GraphConfiguration100141* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100141(); + static const uint32_t hashCode = 1411526436; // autogenerated + +private: + // Configuration + GraphConfiguration100141 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100141 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100100 : public GraphTopology { + +public: + imageSubGraphTopology100100(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvNoTnrWithSapOuterNode* lbffBayerNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100100 : public IStaticGraphConfig +{ +public: + StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100100(); + static const uint32_t hashCode = 979474966; // autogenerated + +private: + // Configuration + GraphConfiguration100100 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvNoTnrWithSapOuterNode _lbffBayerNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100100 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100101 : public GraphTopology { + +public: + imageSubGraphTopology100101(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvNoTnrWithSapOuterNode* lbffBayerWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100101 : public IStaticGraphConfig +{ +public: + StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100101(); + static const uint32_t hashCode = 1847712615; // autogenerated + +private: + // Configuration + GraphConfiguration100101 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvNoTnrWithSapOuterNode _lbffBayerWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100101 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100102 : public GraphTopology { + +public: + imageSubGraphTopology100102(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100102 : public IStaticGraphConfig +{ +public: + StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100102(); + static const uint32_t hashCode = 153319248; // autogenerated + +private: + // Configuration + GraphConfiguration100102 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100102 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100157 : public GraphTopology { + +public: + imageSubGraphTopology100157(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithOpacityOuterNode* lbffBayerNoGmvWithTnrWithOpacityOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100157 : public IStaticGraphConfig +{ +public: + StaticGraph100157(GraphConfiguration100157* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100157(); + static const uint32_t hashCode = 1227238042; // autogenerated + +private: + // Configuration + GraphConfiguration100157 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithOpacityOuterNode _lbffBayerNoGmvWithTnrWithOpacityOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100157 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100103 : public GraphTopology { + +public: + imageSubGraphTopology100103(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvWithTnrWithSapOuterNode* lbffBayerWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100103 : public IStaticGraphConfig +{ +public: + StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100103(); + static const uint32_t hashCode = 2618946733; // autogenerated + +private: + // Configuration + GraphConfiguration100103 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvWithTnrWithSapOuterNode _lbffBayerWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100103 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100135 : public GraphTopology { + +public: + imageSubGraphTopology100135(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100135 : public IStaticGraphConfig +{ +public: + StaticGraph100135(GraphConfiguration100135* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100135(); + static const uint32_t hashCode = 3358004578; // autogenerated + +private: + // Configuration + GraphConfiguration100135 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100135 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100104 : public GraphTopology { + +public: + imageSubGraphTopology100104(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100104 : public IStaticGraphConfig +{ +public: + StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100104(); + static const uint32_t hashCode = 1065030484; // autogenerated + +private: + // Configuration + GraphConfiguration100104 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100104 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100105 : public GraphTopology { + +public: + imageSubGraphTopology100105(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100105 : public IStaticGraphConfig +{ +public: + StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100105(); + static const uint32_t hashCode = 4228759985; // autogenerated + +private: + // Configuration + GraphConfiguration100105 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100105 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100106 : public GraphTopology { + +public: + imageSubGraphTopology100106(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100106 : public IStaticGraphConfig +{ +public: + StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100106(); + static const uint32_t hashCode = 1961584354; // autogenerated + +private: + // Configuration + GraphConfiguration100106 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100106 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100166 : public GraphTopology { + +public: + imageSubGraphTopology100166(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100166 : public IStaticGraphConfig +{ +public: + StaticGraph100166(GraphConfiguration100166* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100166(); + static const uint32_t hashCode = 2757085200; // autogenerated + +private: + // Configuration + GraphConfiguration100166 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100166 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100107 : public GraphTopology { + +public: + imageSubGraphTopology100107(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100107 : public IStaticGraphConfig +{ +public: + StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100107(); + static const uint32_t hashCode = 3417490043; // autogenerated + +private: + // Configuration + GraphConfiguration100107 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100107 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100145 : public GraphTopology { + +public: + imageSubGraphTopology100145(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100145 : public IStaticGraphConfig +{ +public: + StaticGraph100145(GraphConfiguration100145* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100145(); + static const uint32_t hashCode = 2331839989; // autogenerated + +private: + // Configuration + GraphConfiguration100145 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100145 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[32]; +}; + +class imageSubGraphTopology100108 : public GraphTopology { + +public: + imageSubGraphTopology100108(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100108 : public IStaticGraphConfig +{ +public: + StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100108(); + static const uint32_t hashCode = 2861365606; // autogenerated + +private: + // Configuration + GraphConfiguration100108 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100108 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100109 : public GraphTopology { + +public: + imageSubGraphTopology100109(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100109 : public IStaticGraphConfig +{ +public: + StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100109(); + static const uint32_t hashCode = 2219839771; // autogenerated + +private: + // Configuration + GraphConfiguration100109 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100109 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100110 : public GraphTopology { + +public: + imageSubGraphTopology100110(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100110 : public IStaticGraphConfig +{ +public: + StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100110(); + static const uint32_t hashCode = 2694963488; // autogenerated + +private: + // Configuration + GraphConfiguration100110 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100110 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100111 : public GraphTopology { + +public: + imageSubGraphTopology100111(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100111 : public IStaticGraphConfig +{ +public: + StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100111(); + static const uint32_t hashCode = 4079231553; // autogenerated + +private: + // Configuration + GraphConfiguration100111 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100111 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100136 : public GraphTopology { + +public: + imageSubGraphTopology100136(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100136 : public IStaticGraphConfig +{ +public: + StaticGraph100136(GraphConfiguration100136* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100136(); + static const uint32_t hashCode = 1694054842; // autogenerated + +private: + // Configuration + GraphConfiguration100136 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100136 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100200 : public GraphTopology { + +public: + imageSubGraphTopology100200(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100200 : public IStaticGraphConfig +{ +public: + StaticGraph100200(GraphConfiguration100200* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100200(); + static const uint32_t hashCode = 2110743046; // autogenerated + +private: + // Configuration + GraphConfiguration100200 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100200 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100201 : public GraphTopology { + +public: + imageSubGraphTopology100201(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100201 : public IStaticGraphConfig +{ +public: + StaticGraph100201(GraphConfiguration100201* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100201(); + static const uint32_t hashCode = 2682513749; // autogenerated + +private: + // Configuration + GraphConfiguration100201 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100201 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100112 : public GraphTopology { + +public: + imageSubGraphTopology100112(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode* lbffDol2InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100112 : public IStaticGraphConfig +{ +public: + StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100112(); + static const uint32_t hashCode = 3373148390; // autogenerated + +private: + // Configuration + GraphConfiguration100112 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode _lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100112 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100113 : public GraphTopology { + +public: + imageSubGraphTopology100113(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode* lbffDol2InputsWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100113 : public IStaticGraphConfig +{ +public: + StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100113(); + static const uint32_t hashCode = 775910727; // autogenerated + +private: + // Configuration + GraphConfiguration100113 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode _lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100113 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100114 : public GraphTopology { + +public: + imageSubGraphTopology100114(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode* lbffDol2InputsNoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100114 : public IStaticGraphConfig +{ +public: + StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100114(); + static const uint32_t hashCode = 3079396690; // autogenerated + +private: + // Configuration + GraphConfiguration100114 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode _lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100114 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100146 : public GraphTopology { + +public: + imageSubGraphTopology100146(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode* lbffDol2InputsNoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100146 : public IStaticGraphConfig +{ +public: + StaticGraph100146(GraphConfiguration100146* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100146(); + static const uint32_t hashCode = 2016392616; // autogenerated + +private: + // Configuration + GraphConfiguration100146 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode _lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100146 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100115 : public GraphTopology { + +public: + imageSubGraphTopology100115(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode* lbffDol2InputsWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100115 : public IStaticGraphConfig +{ +public: + StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100115(); + static const uint32_t hashCode = 4059271885; // autogenerated + +private: + // Configuration + GraphConfiguration100115 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode _lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100115 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100116 : public GraphTopology { + +public: + imageSubGraphTopology100116(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode* lbffDol3InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100116 : public IStaticGraphConfig +{ +public: + StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100116(); + static const uint32_t hashCode = 1685832567; // autogenerated + +private: + // Configuration + GraphConfiguration100116 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode _lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100116 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100117 : public GraphTopology { + +public: + imageSubGraphTopology100117(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode* lbffDol3InputsWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100117 : public IStaticGraphConfig +{ +public: + StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100117(); + static const uint32_t hashCode = 2530207606; // autogenerated + +private: + // Configuration + GraphConfiguration100117 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode _lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100117 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100118 : public GraphTopology { + +public: + imageSubGraphTopology100118(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode* lbffDol3InputsNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100118 : public IStaticGraphConfig +{ +public: + StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100118(); + static const uint32_t hashCode = 3747109621; // autogenerated + +private: + // Configuration + GraphConfiguration100118 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode _lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100118 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100119 : public GraphTopology { + +public: + imageSubGraphTopology100119(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode* lbffDol3InputsWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100119 : public IStaticGraphConfig +{ +public: + StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100119(); + static const uint32_t hashCode = 884100888; // autogenerated + +private: + // Configuration + GraphConfiguration100119 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode _lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100119 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[32]; +}; + +class imageSubGraphTopology100120 : public GraphTopology { + +public: + imageSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100120 : public GraphTopology { + +public: + irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100120 : public GraphTopology { + +public: + image_irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100120 : public IStaticGraphConfig +{ +public: + StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100120(); + static const uint32_t hashCode = 2575276355; // autogenerated + +private: + // Configuration + GraphConfiguration100120 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvNoTnrWithSapOuterNode _lbffRgbIrNoGmvNoTnrWithSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100120 _imageSubGraph; + irSubGraphTopology100120 _irSubGraph; + image_irSubGraphTopology100120 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100121 : public GraphTopology { + +public: + imageSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100121 : public GraphTopology { + +public: + irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100121 : public GraphTopology { + +public: + image_irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100121 : public IStaticGraphConfig +{ +public: + StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100121(); + static const uint32_t hashCode = 1182562082; // autogenerated + +private: + // Configuration + GraphConfiguration100121 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvNoTnrWithSapOuterNode _lbffRgbIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100121 _imageSubGraph; + irSubGraphTopology100121 _irSubGraph; + image_irSubGraphTopology100121 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100122 : public GraphTopology { + +public: + imageSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100122 : public GraphTopology { + +public: + irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100122 : public GraphTopology { + +public: + image_irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100122 : public IStaticGraphConfig +{ +public: + StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100122(); + static const uint32_t hashCode = 1989256033; // autogenerated + +private: + // Configuration + GraphConfiguration100122 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvWithTnrWithSapOuterNode _lbffRgbIrNoGmvWithTnrWithSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100122 _imageSubGraph; + irSubGraphTopology100122 _irSubGraph; + image_irSubGraphTopology100122 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[32]; +}; + +class imageSubGraphTopology100123 : public GraphTopology { + +public: + imageSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100123 : public GraphTopology { + +public: + irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 34, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[34]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100123 : public GraphTopology { + +public: + image_irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 37, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[37]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100123 : public IStaticGraphConfig +{ +public: + StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100123(); + static const uint32_t hashCode = 2996897520; // autogenerated + +private: + // Configuration + GraphConfiguration100123 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvWithTnrWithSapOuterNode _lbffRgbIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100123 _imageSubGraph; + irSubGraphTopology100123 _irSubGraph; + image_irSubGraphTopology100123 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[37]; +}; + +class imageSubGraphTopology100127 : public GraphTopology { + +public: + imageSubGraphTopology100127(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvNoTnrWithSapOuterNode* lbffIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100127 : public IStaticGraphConfig +{ +public: + StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100127(); + static const uint32_t hashCode = 665694580; // autogenerated + +private: + // Configuration + GraphConfiguration100127 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvNoTnrWithSapOuterNode _lbffIrNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100127 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100128 : public GraphTopology { + +public: + imageSubGraphTopology100128(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvNoTnrWithSapOuterNode* lbffIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100128 : public IStaticGraphConfig +{ +public: + StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100128(); + static const uint32_t hashCode = 2853013665; // autogenerated + +private: + // Configuration + GraphConfiguration100128 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvNoTnrWithSapOuterNode _lbffIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100128 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100129 : public GraphTopology { + +public: + imageSubGraphTopology100129(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvWithTnrWithSapOuterNode* lbffIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100129 : public IStaticGraphConfig +{ +public: + StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100129(); + static const uint32_t hashCode = 4213662938; // autogenerated + +private: + // Configuration + GraphConfiguration100129 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvWithTnrWithSapOuterNode _lbffIrNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100129 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100130 : public GraphTopology { + +public: + imageSubGraphTopology100130(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvWithTnrWithSapOuterNode* lbffIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100130 : public IStaticGraphConfig +{ +public: + StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100130(); + static const uint32_t hashCode = 869828371; // autogenerated + +private: + // Configuration + GraphConfiguration100130 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvWithTnrWithSapOuterNode _lbffIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100130 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100131 : public GraphTopology { + +public: + imageSubGraphTopology100131(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100131 : public IStaticGraphConfig +{ +public: + StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100131(); + static const uint32_t hashCode = 2610800282; // autogenerated + +private: + // Configuration + GraphConfiguration100131 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100131 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100132 : public GraphTopology { + +public: + imageSubGraphTopology100132(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100132 : public IStaticGraphConfig +{ +public: + StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100132(); + static const uint32_t hashCode = 3902911643; // autogenerated + +private: + // Configuration + GraphConfiguration100132 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100132 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100133 : public GraphTopology { + +public: + imageSubGraphTopology100133(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100133 : public IStaticGraphConfig +{ +public: + StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100133(); + static const uint32_t hashCode = 1466946020; // autogenerated + +private: + // Configuration + GraphConfiguration100133 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100133 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100134 : public GraphTopology { + +public: + imageSubGraphTopology100134(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100134 : public IStaticGraphConfig +{ +public: + StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100134(); + static const uint32_t hashCode = 3934160849; // autogenerated + +private: + // Configuration + GraphConfiguration100134 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100134 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100235 : public GraphTopology { + +public: + imageSubGraphTopology100235(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100235 : public IStaticGraphConfig +{ +public: + StaticGraph100235(GraphConfiguration100235* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100235(); + static const uint32_t hashCode = 2478418735; // autogenerated + +private: + // Configuration + GraphConfiguration100235 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100235 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100236 : public GraphTopology { + +public: + imageSubGraphTopology100236(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100236 : public IStaticGraphConfig +{ +public: + StaticGraph100236(GraphConfiguration100236* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100236(); + static const uint32_t hashCode = 1051883122; // autogenerated + +private: + // Configuration + GraphConfiguration100236 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100236 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100202 : public GraphTopology { + +public: + imageSubGraphTopology100202(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100202 : public IStaticGraphConfig +{ +public: + StaticGraph100202(GraphConfiguration100202* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100202(); + static const uint32_t hashCode = 3098003927; // autogenerated + +private: + // Configuration + GraphConfiguration100202 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100202 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100203 : public GraphTopology { + +public: + imageSubGraphTopology100203(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100203 : public IStaticGraphConfig +{ +public: + StaticGraph100203(GraphConfiguration100203* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100203(); + static const uint32_t hashCode = 3620359798; // autogenerated + +private: + // Configuration + GraphConfiguration100203 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100203 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100279 : public GraphTopology { + +public: + imageSubGraphTopology100279(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100279 : public IStaticGraphConfig +{ +public: + StaticGraph100279(GraphConfiguration100279* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100279(); + static const uint32_t hashCode = 2460009817; // autogenerated + +private: + // Configuration + GraphConfiguration100279 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100279 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100280 : public GraphTopology { + +public: + imageSubGraphTopology100280(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100280 : public IStaticGraphConfig +{ +public: + StaticGraph100280(GraphConfiguration100280* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100280(); + static const uint32_t hashCode = 1706839531; // autogenerated + +private: + // Configuration + GraphConfiguration100280 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100280 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100281 : public GraphTopology { + +public: + imageSubGraphTopology100281(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100281 : public IStaticGraphConfig +{ +public: + StaticGraph100281(GraphConfiguration100281* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100281(); + static const uint32_t hashCode = 2869082619; // autogenerated + +private: + // Configuration + GraphConfiguration100281 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100281 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100204 : public GraphTopology { + +public: + imageSubGraphTopology100204(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100204 : public IStaticGraphConfig +{ +public: + StaticGraph100204(GraphConfiguration100204* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100204(); + static const uint32_t hashCode = 1660669249; // autogenerated + +private: + // Configuration + GraphConfiguration100204 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100204 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100205 : public GraphTopology { + +public: + imageSubGraphTopology100205(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100205 : public IStaticGraphConfig +{ +public: + StaticGraph100205(GraphConfiguration100205* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100205(); + static const uint32_t hashCode = 1883478648; // autogenerated + +private: + // Configuration + GraphConfiguration100205 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100205 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100206 : public GraphTopology { + +public: + imageSubGraphTopology100206(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100206 : public IStaticGraphConfig +{ +public: + StaticGraph100206(GraphConfiguration100206* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100206(); + static const uint32_t hashCode = 518310241; // autogenerated + +private: + // Configuration + GraphConfiguration100206 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100206 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100266 : public GraphTopology { + +public: + imageSubGraphTopology100266(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100266 : public IStaticGraphConfig +{ +public: + StaticGraph100266(GraphConfiguration100266* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100266(); + static const uint32_t hashCode = 1168531559; // autogenerated + +private: + // Configuration + GraphConfiguration100266 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100266 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100207 : public GraphTopology { + +public: + imageSubGraphTopology100207(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100207 : public IStaticGraphConfig +{ +public: + StaticGraph100207(GraphConfiguration100207* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100207(); + static const uint32_t hashCode = 3134985348; // autogenerated + +private: + // Configuration + GraphConfiguration100207 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100207 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100267 : public GraphTopology { + +public: + imageSubGraphTopology100267(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class StaticGraph100267 : public IStaticGraphConfig +{ +public: + StaticGraph100267(GraphConfiguration100267* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100267(); + static const uint32_t hashCode = 1282030934; // autogenerated + +private: + // Configuration + GraphConfiguration100267 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100267 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100208 : public GraphTopology { + +public: + imageSubGraphTopology100208(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100208 : public IStaticGraphConfig +{ +public: + StaticGraph100208(GraphConfiguration100208* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100208(); + static const uint32_t hashCode = 1303928563; // autogenerated + +private: + // Configuration + GraphConfiguration100208 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100208 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100209 : public GraphTopology { + +public: + imageSubGraphTopology100209(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100209 : public IStaticGraphConfig +{ +public: + StaticGraph100209(GraphConfiguration100209* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100209(); + static const uint32_t hashCode = 2222977298; // autogenerated + +private: + // Configuration + GraphConfiguration100209 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100209 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100210 : public GraphTopology { + +public: + imageSubGraphTopology100210(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class StaticGraph100210 : public IStaticGraphConfig +{ +public: + StaticGraph100210(GraphConfiguration100210* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100210(); + static const uint32_t hashCode = 3037692187; // autogenerated + +private: + // Configuration + GraphConfiguration100210 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100210 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100211 : public GraphTopology { + +public: + imageSubGraphTopology100211(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100211 : public IStaticGraphConfig +{ +public: + StaticGraph100211(GraphConfiguration100211* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100211(); + static const uint32_t hashCode = 523724710; // autogenerated + +private: + // Configuration + GraphConfiguration100211 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100211 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100245 : public GraphTopology { + +public: + imageSubGraphTopology100245(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100245 : public IStaticGraphConfig +{ +public: + StaticGraph100245(GraphConfiguration100245* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100245(); + static const uint32_t hashCode = 1070431653; // autogenerated + +private: + // Configuration + GraphConfiguration100245 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100245 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100212 : public GraphTopology { + +public: + imageSubGraphTopology100212(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode* lbffDol2InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100212 : public IStaticGraphConfig +{ +public: + StaticGraph100212(GraphConfiguration100212* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100212(); + static const uint32_t hashCode = 188186817; // autogenerated + +private: + // Configuration + GraphConfiguration100212 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode _lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100212 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100213 : public GraphTopology { + +public: + imageSubGraphTopology100213(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode* lbffDol2InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100213 : public IStaticGraphConfig +{ +public: + StaticGraph100213(GraphConfiguration100213* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100213(); + static const uint32_t hashCode = 472923214; // autogenerated + +private: + // Configuration + GraphConfiguration100213 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode _lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100213 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100214 : public GraphTopology { + +public: + imageSubGraphTopology100214(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode* lbffDol2InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100214 : public IStaticGraphConfig +{ +public: + StaticGraph100214(GraphConfiguration100214* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100214(); + static const uint32_t hashCode = 622107393; // autogenerated + +private: + // Configuration + GraphConfiguration100214 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode _lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100214 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100215 : public GraphTopology { + +public: + imageSubGraphTopology100215(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode* lbffDol2InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100215 : public IStaticGraphConfig +{ +public: + StaticGraph100215(GraphConfiguration100215* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100215(); + static const uint32_t hashCode = 601786370; // autogenerated + +private: + // Configuration + GraphConfiguration100215 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode _lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100215 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100216 : public GraphTopology { + +public: + imageSubGraphTopology100216(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode* lbffDol3InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100216 : public IStaticGraphConfig +{ +public: + StaticGraph100216(GraphConfiguration100216* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100216(); + static const uint32_t hashCode = 2917059976; // autogenerated + +private: + // Configuration + GraphConfiguration100216 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode _lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100216 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100217 : public GraphTopology { + +public: + imageSubGraphTopology100217(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode* lbffDol3InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100217 : public IStaticGraphConfig +{ +public: + StaticGraph100217(GraphConfiguration100217* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100217(); + static const uint32_t hashCode = 3566156067; // autogenerated + +private: + // Configuration + GraphConfiguration100217 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode _lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100217 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100218 : public GraphTopology { + +public: + imageSubGraphTopology100218(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode* lbffDol3InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +}; + +class StaticGraph100218 : public IStaticGraphConfig +{ +public: + StaticGraph100218(GraphConfiguration100218* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100218(); + static const uint32_t hashCode = 959076628; // autogenerated + +private: + // Configuration + GraphConfiguration100218 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode _lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100218 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100219 : public GraphTopology { + +public: + imageSubGraphTopology100219(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode* lbffDol3InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +}; + +class StaticGraph100219 : public IStaticGraphConfig +{ +public: + StaticGraph100219(GraphConfiguration100219* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100219(); + static const uint32_t hashCode = 1127650427; // autogenerated + +private: + // Configuration + GraphConfiguration100219 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode _lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100219 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100220 : public GraphTopology { + +public: + imageSubGraphTopology100220(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class irSubGraphTopology100220 : public GraphTopology { + +public: + irSubGraphTopology100220(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class image_irSubGraphTopology100220 : public GraphTopology { + +public: + image_irSubGraphTopology100220(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100220 : public IStaticGraphConfig +{ +public: + StaticGraph100220(GraphConfiguration100220* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100220(); + static const uint32_t hashCode = 424044802; // autogenerated + +private: + // Configuration + GraphConfiguration100220 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrNoGmvNoTnrNoSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100220 _imageSubGraph; + irSubGraphTopology100220 _irSubGraph; + image_irSubGraphTopology100220 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100221 : public GraphTopology { + +public: + imageSubGraphTopology100221(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class irSubGraphTopology100221 : public GraphTopology { + +public: + irSubGraphTopology100221(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class image_irSubGraphTopology100221 : public GraphTopology { + +public: + image_irSubGraphTopology100221(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +}; + +class StaticGraph100221 : public IStaticGraphConfig +{ +public: + StaticGraph100221(GraphConfiguration100221* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100221(); + static const uint32_t hashCode = 324391743; // autogenerated + +private: + // Configuration + GraphConfiguration100221 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrWithGmvNoTnrNoSapOuterNode _lbffRgbIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100221 _imageSubGraph; + irSubGraphTopology100221 _irSubGraph; + image_irSubGraphTopology100221 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100222 : public GraphTopology { + +public: + imageSubGraphTopology100222(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class irSubGraphTopology100222 : public GraphTopology { + +public: + irSubGraphTopology100222(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class image_irSubGraphTopology100222 : public GraphTopology { + +public: + image_irSubGraphTopology100222(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class StaticGraph100222 : public IStaticGraphConfig +{ +public: + StaticGraph100222(GraphConfiguration100222* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100222(); + static const uint32_t hashCode = 2962422506; // autogenerated + +private: + // Configuration + GraphConfiguration100222 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrNoGmvWithTnrNoSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100222 _imageSubGraph; + irSubGraphTopology100222 _irSubGraph; + image_irSubGraphTopology100222 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100223 : public GraphTopology { + +public: + imageSubGraphTopology100223(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class irSubGraphTopology100223 : public GraphTopology { + +public: + irSubGraphTopology100223(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +}; + +class image_irSubGraphTopology100223 : public GraphTopology { + +public: + image_irSubGraphTopology100223(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +}; + +class StaticGraph100223 : public IStaticGraphConfig +{ +public: + StaticGraph100223(GraphConfiguration100223* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100223(); + static const uint32_t hashCode = 996717983; // autogenerated + +private: + // Configuration + GraphConfiguration100223 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrWithGmvWithTnrNoSapOuterNode _lbffRgbIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100223 _imageSubGraph; + irSubGraphTopology100223 _irSubGraph; + image_irSubGraphTopology100223 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100224 : public GraphTopology { + +public: + imageSubGraphTopology100224(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 8, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[8]; + +}; + +class StaticGraph100224 : public IStaticGraphConfig +{ +public: + StaticGraph100224(GraphConfiguration100224* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100224(); + static const uint32_t hashCode = 345517015; // autogenerated + +private: + // Configuration + GraphConfiguration100224 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100224 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[10]; +}; + +class imageSubGraphTopology100240 : public GraphTopology { + +public: + imageSubGraphTopology100240(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100240 : public IStaticGraphConfig +{ +public: + StaticGraph100240(GraphConfiguration100240* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100240(); + static const uint32_t hashCode = 3849563206; // autogenerated + +private: + // Configuration + GraphConfiguration100240 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100240 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100241 : public GraphTopology { + +public: + imageSubGraphTopology100241(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100241 : public IStaticGraphConfig +{ +public: + StaticGraph100241(GraphConfiguration100241* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100241(); + static const uint32_t hashCode = 3912612986; // autogenerated + +private: + // Configuration + GraphConfiguration100241 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100241 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100242 : public GraphTopology { + +public: + imageSubGraphTopology100242(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100242 : public IStaticGraphConfig +{ +public: + StaticGraph100242(GraphConfiguration100242* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100242(); + static const uint32_t hashCode = 2667353983; // autogenerated + +private: + // Configuration + GraphConfiguration100242 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100242 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100227 : public GraphTopology { + +public: + imageSubGraphTopology100227(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrNoGmvNoTnrNoSapOuterNode* lbffIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100227 : public IStaticGraphConfig +{ +public: + StaticGraph100227(GraphConfiguration100227* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100227(); + static const uint32_t hashCode = 3291893363; // autogenerated + +private: + // Configuration + GraphConfiguration100227 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrNoGmvNoTnrNoSapOuterNode _lbffIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100227 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100228 : public GraphTopology { + +public: + imageSubGraphTopology100228(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrWithGmvNoTnrNoSapOuterNode* lbffIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100228 : public IStaticGraphConfig +{ +public: + StaticGraph100228(GraphConfiguration100228* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100228(); + static const uint32_t hashCode = 2030580190; // autogenerated + +private: + // Configuration + GraphConfiguration100228 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrWithGmvNoTnrNoSapOuterNode _lbffIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100228 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100229 : public GraphTopology { + +public: + imageSubGraphTopology100229(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrNoGmvWithTnrNoSapOuterNode* lbffIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100229 : public IStaticGraphConfig +{ +public: + StaticGraph100229(GraphConfiguration100229* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100229(); + static const uint32_t hashCode = 229162971; // autogenerated + +private: + // Configuration + GraphConfiguration100229 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrNoGmvWithTnrNoSapOuterNode _lbffIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100229 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100230 : public GraphTopology { + +public: + imageSubGraphTopology100230(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrWithGmvWithTnrNoSapOuterNode* lbffIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100230 : public IStaticGraphConfig +{ +public: + StaticGraph100230(GraphConfiguration100230* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100230(); + static const uint32_t hashCode = 1293637986; // autogenerated + +private: + // Configuration + GraphConfiguration100230 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrWithGmvWithTnrNoSapOuterNode _lbffIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100230 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100231 : public GraphTopology { + +public: + imageSubGraphTopology100231(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100231 : public IStaticGraphConfig +{ +public: + StaticGraph100231(GraphConfiguration100231* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100231(); + static const uint32_t hashCode = 284443579; // autogenerated + +private: + // Configuration + GraphConfiguration100231 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100231 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100232 : public GraphTopology { + +public: + imageSubGraphTopology100232(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class StaticGraph100232 : public IStaticGraphConfig +{ +public: + StaticGraph100232(GraphConfiguration100232* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100232(); + static const uint32_t hashCode = 1251767534; // autogenerated + +private: + // Configuration + GraphConfiguration100232 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100232 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100233 : public GraphTopology { + +public: + imageSubGraphTopology100233(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100233 : public IStaticGraphConfig +{ +public: + StaticGraph100233(GraphConfiguration100233* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100233(); + static const uint32_t hashCode = 1788993219; // autogenerated + +private: + // Configuration + GraphConfiguration100233 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100233 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100234 : public GraphTopology { + +public: + imageSubGraphTopology100234(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100234 : public IStaticGraphConfig +{ +public: + StaticGraph100234(GraphConfiguration100234* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100234(); + static const uint32_t hashCode = 3087090034; // autogenerated + +private: + // Configuration + GraphConfiguration100234 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100234 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class rawSubGraphTopology100026 : public GraphTopology { + +public: + rawSubGraphTopology100026(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 2, sinkMappingConfiguration) {} + IsysOuterNode* isysOuterNode = nullptr; + GraphLink* subGraphLinks[2]; + +}; + +class StaticGraph100026 : public IStaticGraphConfig +{ +public: + StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100026(); + static const uint32_t hashCode = 3403963292; // autogenerated + +private: + // Configuration + GraphConfiguration100026 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100026 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[2]; +}; + +class rawSubGraphTopology100059 : public GraphTopology { + +public: + rawSubGraphTopology100059(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100059 : public IStaticGraphConfig +{ +public: + StaticGraph100059(GraphConfiguration100059* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100059(); + static const uint32_t hashCode = 562421768; // autogenerated + +private: + // Configuration + GraphConfiguration100059 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100059 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100035 : public GraphTopology { + +public: + rawSubGraphTopology100035(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysDolOuterNode* isysDolOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100035 : public IStaticGraphConfig +{ +public: + StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100035(); + static const uint32_t hashCode = 4053127082; // autogenerated + +private: + // Configuration + GraphConfiguration100035 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100035 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100036 : public GraphTopology { + +public: + rawSubGraphTopology100036(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100036 : public IStaticGraphConfig +{ +public: + StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100036(); + static const uint32_t hashCode = 4053127082; // autogenerated + +private: + // Configuration + GraphConfiguration100036 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100036 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100037 : public GraphTopology { + +public: + rawSubGraphTopology100037(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100037 : public IStaticGraphConfig +{ +public: + StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100037(); + static const uint32_t hashCode = 562421768; // autogenerated + +private: + // Configuration + GraphConfiguration100037 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100037 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100058 : public GraphTopology { + +public: + rawSubGraphTopology100058(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100058 : public IStaticGraphConfig +{ +public: + StaticGraph100058(GraphConfiguration100058* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100058(); + static const uint32_t hashCode = 562421768; // autogenerated + +private: + // Configuration + GraphConfiguration100058 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100058 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100038 : public GraphTopology { + +public: + rawSubGraphTopology100038(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; + +}; + +class StaticGraph100038 : public IStaticGraphConfig +{ +public: + StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100038(); + static const uint32_t hashCode = 1915233574; // autogenerated + +private: + // Configuration + GraphConfiguration100038 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100038 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; + +class rawSubGraphTopology100039 : public GraphTopology { + +public: + rawSubGraphTopology100039(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; + +}; + +class StaticGraph100039 : public IStaticGraphConfig +{ +public: + StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100039(); + static const uint32_t hashCode = 1915233574; // autogenerated + +private: + // Configuration + GraphConfiguration100039 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100039 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphBinaryAutogen.h new file mode 100644 index 0000000..e162954 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphBinaryAutogen.h @@ -0,0 +1,104 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_BINARY_H +#define STATIC_GRAPH_BINARY_H + +#include + +#pragma pack(push, 4) +struct SensorMode { + uint16_t horizontalCropOffset = 0; + uint16_t verticalCropOffset = 0; + uint16_t croppedImageWidth = 0; + uint16_t croppedImageHeight = 0; + uint16_t horizontalScalingNumerator = 0; + uint16_t horizontalScalingDenominator = 0; + uint16_t verticalScalingNumerator = 0; + uint16_t verticalScalingDenominator = 0; +}; + +struct StreamConfig { + uint32_t width = 0; + uint32_t height = 0; + uint32_t bpp = 0; +}; + +struct AutoCalibrationStreamConfig { + uint32_t depthOutputWidth = 0; + uint32_t depthOutputHeight = 0; + uint32_t sliceNumber = 0; +}; + +enum class GraphConfigurationKeyAttributes : uint32_t +{ + None = 0x00000000, + PdafType1 = 0x00000001, + PdafType2 = 0x00000002, + PdafType3 = 0x00000004, + Dol2Inputs = 0x00000008, + Dol3Inputs = 0x00000010, + DvsActive = 0x00000020, + PipelineLowLight = 0x00000040, + PipelineNormalLight = 0x00000080, + LowPowerActive = 0x00000100, + OpacityActive = 0x00000200, + StillsModeCpHdr = 0x00000400, +}; + +struct GraphConfigurationKey { + uint32_t fps = 0; + uint32_t attributes = 0; + StreamConfig preview; + StreamConfig video; + StreamConfig postProcessingVideo; + StreamConfig stills; + StreamConfig raw; + StreamConfig videoIr; + StreamConfig previewIr; +}; + +struct GraphConfigurationHeader { + uint32_t additonalFeaturesBit = 0; + GraphConfigurationKey settingsKey; + uint16_t settingId = 0; + int32_t graphId = 0; + uint8_t sensorModeIndex = 0; + int32_t resConfigDataOffset = 0; + uint32_t graphHashCode = 0; +}; + +struct BinaryHeader { + uint32_t sapAttributes = 0; + uint32_t binaryCommonHashCode = 0; + uint32_t numberOfResolutions = 0; + uint32_t numberOfSensorModes = 0; +}; + +#pragma pack(pop) + +#endif diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.c b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.c new file mode 100644 index 0000000..7e46b58 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.c @@ -0,0 +1,183 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8StaticGraphDataPreloadAutogen.h" + +void parseTable(char* binaryData, GraphHashCodesTable* table) +{ + char* fileOffset = binaryData; + uint32_t numOfAvailablePins = 0; + uint32_t i; + + table->hashCodes = 0; + + //Skipping BinaryHeader + + fileOffset += sizeof(BinaryHeader); + + //Skipping DataRange: + DataRangeHeader dataRangeHeader = *(DataRangeHeader*)fileOffset; + for (int j = 0; j < enNumOfOutPins; j++) + numOfAvailablePins += dataRangeHeader.NumberOfPinResolutions[j]; + fileOffset += sizeof(DataRangeHeader) + sizeof(DriverDesc) * numOfAvailablePins; + + //Parsing table: + table->numOfGraphs = *(uint32_t*)fileOffset; + table->hashCodes = (GraphHashCode*)malloc(sizeof(GraphHashCode) * (table->numOfGraphs)); + + fileOffset += sizeof(table->numOfGraphs); + for (i = 0; i < table->numOfGraphs; ++i) + { + table->hashCodes[i] = *(GraphHashCode*)fileOffset; + fileOffset += sizeof(GraphHashCode); + } +} + +int validateHashCodes_aux(GraphHashCodesTable* table) +{ + uint32_t tableIndex, lookupIndex; + int current; + int retVal = TRUE; + + for (tableIndex = 0, lookupIndex = 1; + tableIndex < table->numOfGraphs && lookupIndex < (uint32_t)distinctGraphsCount + 1;) + { + if (hashCodeLookup[lookupIndex].key == table->hashCodes[tableIndex].key) + { + current = hashCodeLookup[lookupIndex].value == table->hashCodes[tableIndex].value; + retVal = retVal && current; + if (!current) + { + //Graph exists in binary data & autogenerated code but hash keys don't match. + printf("FAILURE: graph %d has hash 0x%X in the generated lookup table, 0x%X in the binary data.\n", + hashCodeLookup[lookupIndex].key, hashCodeLookup[lookupIndex].value, table->hashCodes[tableIndex].value); + } + else + { + printf("SUCCESS: graph %d is identical in binary & generated code.\n", hashCodeLookup[lookupIndex].key); + } + ++lookupIndex; + ++tableIndex; + } + else if (table->hashCodes[tableIndex].key < hashCodeLookup[lookupIndex].key) + { + //Graph exists in binary data but not in autogenerated code. + printf("FAILURE: graph %d exists in the binary data but not in the generated lookup table.\n", table->hashCodes[tableIndex].key); + retVal = FALSE; + ++tableIndex; + } + else + { + //Graph exists in autogenerated code but not in binary data. + printf("FAILURE: graph %d exists in the generated lookup table but not in the binary data.\n", hashCodeLookup[lookupIndex].key); + retVal = FALSE; + ++lookupIndex; + } + } + for (; tableIndex < table->numOfGraphs; ++tableIndex) + { + //Graph exists in binary data but not in autogenerated code. + printf("FAILURE: graph %d exists in the binary data but not in the generated lookup table.\n", table->hashCodes[tableIndex].key); + retVal = FALSE; + } + for (; lookupIndex < (uint32_t)distinctGraphsCount + 1; ++lookupIndex) + { + //Graph exists in autogenerated code but not in binary data. + printf("FAILURE: graph %d exists in the generated lookup table but not in the binary data.\n", hashCodeLookup[lookupIndex].key); + retVal = FALSE; + } + return retVal; +} + +int validateHashCodes(char* binaryData) +{ + int retVal = TRUE; + GraphHashCodesTable table; + uint32_t commonHash = ((BinaryHeader*)binaryData)->binaryCommonHashCode; + + parseTable(binaryData, &table); + if (table.hashCodes == 0) + { + printf("Memory allocation error in validateHashCodes.\n"); + return FALSE; + } + + if (hashCodeLookup[0].value != commonHash) + { + retVal = FALSE; + printf("FAILURE: common hash differs between binary data and the generated code.\n"); + } + else + { + printf("SUCCESS: common hash is identical in binary data and the generated code.\n"); + } + + retVal = validateHashCodes_aux(&table) && retVal; + + free(table.hashCodes); + + return retVal; +} + +int GetDataRangeFromBin(char* binaryData, DataRange* dataRange) +{ + + char* fileOffset = NULL; + uint32_t numOfAvailablePins = 0; + uint32_t j = 0; + + fileOffset = binaryData; + //Skipping BinaryHeader + + fileOffset += sizeof(BinaryHeader); + + dataRange->dataRangeHeader = *(DataRangeHeader*)fileOffset; + + uint32_t* pinOffset = (uint32_t*)&dataRange->dataRangeHeader; + + for (j = 0; j< enNumOfOutPins; j++) + if (pinOffset[j]) + numOfAvailablePins++; + + fileOffset += sizeof(DataRangeHeader); + + dataRange->dataRangeMap = (DriverDesc**)malloc(sizeof(DriverDesc*) * numOfAvailablePins); + if (!dataRange->dataRangeMap) + return FALSE; + + for (j = 0; j < enNumOfOutPins; j++) + { + if (pinOffset[j]) + { + dataRange->dataRangeMap[j] = (DriverDesc*)malloc(sizeof(DriverDesc) * pinOffset[j]); + dataRange->dataRangeMap[j] = (DriverDesc*)fileOffset; + fileOffset += sizeof(DriverDesc) * pinOffset[j]; + } + } + + return TRUE; +} \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.h new file mode 100644 index 0000000..4afc436 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.h @@ -0,0 +1,446 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef DATA_RANGE_H_ +#define DATA_RANGE_H_ + +#include +#include +#include + +#define TRUE 1 +#define FALSE 0 + +typedef struct +{ + uint32_t key; + uint32_t value; +}GraphHashCode; + +typedef struct +{ + uint32_t numOfGraphs; + GraphHashCode* hashCodes; +}GraphHashCodesTable; + +typedef struct { + char* format; + char* subFormat; + unsigned long fourCC; + int Bpp; +} FrameFormatDesc; + +typedef enum +{ + enPreview, + enVideo, + enStills, + enRaw, + enIr, + enNumOfOutPins + +}DataRangePins; + +typedef struct { + + uint32_t sapAttributes; + uint32_t binaryCommonHashCode; + uint32_t numberOfResolutions; + uint32_t numberOfSensorModes; + +}BinaryHeader; + +typedef struct DriverDesc { + + uint32_t format; + uint32_t width; + uint32_t height; + uint32_t fps; + +}DriverDesc; + +typedef struct DataRangeHeader { + + uint32_t NumberOfPinResolutions[enNumOfOutPins]; + +}DataRangeHeader; + +typedef struct DataRange +{ + DataRangeHeader dataRangeHeader; + DriverDesc** dataRangeMap; + +}DataRange; + +static int distinctGraphsCount = 142; + +static GraphHashCode hashCodeLookup[] = { + {0, 0x4229ABEE}, + {100000, 0x274DFCAB}, + {100001, 0x513C5C0E}, + {100002, 0xDFF5303}, + {100003, 0xF1CDFFC2}, + {100004, 0x70DEA50D}, + {100005, 0x113D8DE4}, + {100006, 0x49A083FD}, + {100007, 0x897C7BC0}, + {100008, 0x7D0963A7}, + {100009, 0xAD054036}, + {100010, 0x49AB695F}, + {100011, 0x52A76E5A}, + {100012, 0x7304B1F5}, + {100013, 0xC01767C2}, + {100014, 0x1B86E725}, + {100015, 0xD849E6E6}, + {100016, 0xC7DF838C}, + {100017, 0xC5D56877}, + {100018, 0x79E8D648}, + {100019, 0x1584533F}, + {100020, 0xE4755386}, + {100021, 0x6DD04F23}, + {100022, 0x6656A3CE}, + {100023, 0xDD5FE263}, + {100024, 0x72B86072}, + {100026, 0xCAE45B9C}, + {100027, 0x1CF9C737}, + {100028, 0x4D910412}, + {100029, 0x20B9B42F}, + {100030, 0x6B1BD1A6}, + {100031, 0xA3184D5F}, + {100032, 0xF5E37182}, + {100033, 0xE1EBD877}, + {100034, 0xD0B0EF16}, + {100035, 0xF195CFAA}, + {100036, 0xF195CFAA}, + {100037, 0x2185E008}, + {100038, 0x72282526}, + {100039, 0x72282526}, + {100040, 0xB4DF03EB}, + {100041, 0xBB37A983}, + {100042, 0x7C4EE476}, + {100045, 0xB2139259}, + {100058, 0x2185E008}, + {100059, 0x2185E008}, + {100066, 0xE2462673}, + {100067, 0x13B71B02}, + {100079, 0x1FBFBDB5}, + {100080, 0x8FE2FDB7}, + {100081, 0xEECE4A7}, + {100100, 0x3A619A16}, + {100101, 0x6E21DB67}, + {100102, 0x9237750}, + {100103, 0x9C19F4AD}, + {100104, 0x3F7B1354}, + {100105, 0xFC0DC1B1}, + {100106, 0x74EB66E2}, + {100107, 0xCBB2C27B}, + {100108, 0xAA8CF966}, + {100109, 0x8450111B}, + {100110, 0xA0A1E120}, + {100111, 0xF3242241}, + {100112, 0xC90E28E6}, + {100113, 0x2E3F7547}, + {100114, 0xB78BDD52}, + {100115, 0xF1F392CD}, + {100116, 0x647BC377}, + {100117, 0x96CFE776}, + {100118, 0xDF585AF5}, + {100119, 0x34B24F18}, + {100120, 0x997F9943}, + {100121, 0x467C7722}, + {100122, 0x7691A361}, + {100123, 0xB2A106F0}, + {100127, 0x27ADB174}, + {100128, 0xAA0D88A1}, + {100129, 0xFB2764DA}, + {100130, 0x33D88713}, + {100131, 0x9B9DA69A}, + {100132, 0xE8A1B49B}, + {100133, 0x576FD1E4}, + {100134, 0xEA7E87D1}, + {100135, 0xC8271562}, + {100136, 0x64F939BA}, + {100137, 0x4545E450}, + {100138, 0xC77E7A18}, + {100139, 0x7B895C1A}, + {100140, 0x9AE28560}, + {100141, 0x54222F24}, + {100142, 0x916CAAF2}, + {100143, 0x770C7E68}, + {100144, 0x11B9A10C}, + {100145, 0x8AFD0DF5}, + {100146, 0x782FB5A8}, + {100157, 0x49262A9A}, + {100162, 0x17DB7D62}, + {100166, 0xA455C810}, + {100169, 0x17DB7D62}, + {100200, 0x7DCF6206}, + {100201, 0x9FE3E955}, + {100202, 0xB8A7C9D7}, + {100203, 0xD7CA4E76}, + {100204, 0x62FBCD41}, + {100205, 0x70439A78}, + {100206, 0x1EE4C961}, + {100207, 0xBADC1484}, + {100208, 0x4DB85EF3}, + {100209, 0x847FF112}, + {100210, 0xB50F811B}, + {100211, 0x1F3767A6}, + {100212, 0xB3780C1}, + {100213, 0x1C303C4E}, + {100214, 0x25149B01}, + {100215, 0x23DE8802}, + {100216, 0xADDECD88}, + {100217, 0xD48F3923}, + {100218, 0x392A5914}, + {100219, 0x4336947B}, + {100220, 0x19466902}, + {100221, 0x1355D33F}, + {100222, 0xB092FAEA}, + {100223, 0x3B68B59F}, + {100224, 0x14982BD7}, + {100227, 0xC4364E73}, + {100228, 0x790831DE}, + {100229, 0xDA8BFDB}, + {100230, 0x4D1B5962}, + {100231, 0x10F443BB}, + {100232, 0x4A9C74EE}, + {100233, 0x6AA1DEC3}, + {100234, 0xB8014172}, + {100235, 0x93B9AB2F}, + {100236, 0x3EB27672}, + {100240, 0xE573AC46}, + {100241, 0xE935BC7A}, + {100242, 0x9EFC977F}, + {100245, 0x3FCD7DA5}, + {100266, 0x45A66067}, + {100267, 0x4C6A3D56}, + {100279, 0x92A0C559}, + {100280, 0x65BC4DEB}, + {100281, 0xAB02B9FB} + }; + +static FrameFormatDesc formatsDB[] = { + {"YUV", "NV12", 0x3231564E, 8}, + {"YUV", "P010", 0x30313050, 10}, + {"YUV", "P012", 0x32313050, 12}, + {"YUV", "P016", 0x36313050, 16}, + {"BGGR", "BGGR", 0x52474742, 8}, + {"BGGR", "BG10", 0x30314742, 10}, + {"BGGR", "BG12", 0x32314742, 12}, + {"BGGR", "BG16", 0x36314742, 16}, + {"BGGRP", "BG0P", 0x50304742, 8}, + {"BGGRP", "BG1P", 0x50314742, 10}, + {"BGGRP", "BG2P", 0x50324742, 12}, + {"BGGRP", "BG3P", 0x50334742, 16}, + {"BGGRD", "BG0D", 0x44304742, 8}, + {"BGGRD", "BG1D", 0x44314742, 10}, + {"BGGRD", "BG2D", 0x44324742, 12}, + {"BGGRD", "BG3D", 0x44334742, 16}, + {"GBRG", "GBRG", 0x47524247, 8}, + {"GBRG", "GB10", 0x30314247, 10}, + {"GBRG", "GB12", 0x32314247, 12}, + {"GBRG", "GB16", 0x36314247, 16}, + {"GBRGP", "GB0P", 0x50304247, 8}, + {"GBRGP", "GB1P", 0x50314247, 10}, + {"GBRGP", "GB2P", 0x50324247, 12}, + {"GBRGP", "GB3P", 0x50334247, 16}, + {"GBRGD", "GB0D", 0x44304247, 8}, + {"GBRGD", "GB1D", 0x44314247, 10}, + {"GBRGD", "GB2D", 0x44324247, 12}, + {"GBRGD", "GB3D", 0x44334247, 16}, + {"GRBG", "GRBG", 0x47425247, 8}, + {"GRBG", "GR10", 0x30315247, 10}, + {"GRBG", "GR12", 0x32315247, 12}, + {"GRBG", "GR16", 0x36315247, 16}, + {"GRBGP", "GR0P", 0x50305247, 8}, + {"GRBGP", "GR1P", 0x50315247, 10}, + {"GRBGP", "GR2P", 0x50325247, 12}, + {"GRBGP", "GR3P", 0x50335247, 16}, + {"GRBGD", "GR0D", 0x44305247, 8}, + {"GRBGD", "GR1D", 0x44315247, 10}, + {"GRBGD", "GR2D", 0x44325247, 12}, + {"GRBGD", "GR3D", 0x44335247, 16}, + {"RGGB", "RGGB", 0x42474752, 8}, + {"RGGB", "RG10", 0x30314752, 10}, + {"RGGB", "RG12", 0x32314752, 12}, + {"RGGB", "RG16", 0x36314752, 16}, + {"RGGBP", "RG0P", 0x50304752, 8}, + {"RGGBP", "RG1P", 0x50314752, 10}, + {"RGGBP", "RG2P", 0x50324752, 12}, + {"RGGBP", "RG3P", 0x50334752, 16}, + {"RGGBD", "RG0D", 0x44304752, 8}, + {"RGGBD", "RG1D", 0x44314752, 10}, + {"RGGBD", "RG2D", 0x44324752, 12}, + {"RGGBD", "RG3D", 0x44334752, 16}, + {"BGIR", "BGI0", 0x30494742, 8}, + {"BGIR", "BGI1", 0x31494742, 10}, + {"BGIR", "BGI2", 0x32494742, 12}, + {"BGIR", "BGI3", 0x33494742, 16}, + {"BGIRP", "BGP0", 0x30504742, 8}, + {"BGIRP", "BGP1", 0x31504742, 10}, + {"BGIRP", "BGP2", 0x32504742, 12}, + {"BGIRP", "BGP3", 0x33504742, 16}, + {"GRBI", "GRI0", 0x30495247, 8}, + {"GRBI", "GRI1", 0x31495247, 10}, + {"GRBI", "GRI2", 0x32495247, 12}, + {"GRBI", "GRI3", 0x33495247, 16}, + {"GRBIP", "GRP0", 0x30505247, 8}, + {"GRBIP", "GRP1", 0x31505247, 10}, + {"GRBIP", "GRP2", 0x32505247, 12}, + {"GRBIP", "GRP3", 0x33505247, 16}, + {"IRBG", "IRB0", 0x30425249, 8}, + {"IRBG", "IRB1", 0x31425249, 10}, + {"IRBG", "IRB2", 0x32425249, 12}, + {"IRBG", "IRB3", 0x33425249, 16}, + {"IRBGP", "IRP0", 0x30505249, 8}, + {"IRBGP", "IRP1", 0x31505249, 10}, + {"IRBGP", "IRP2", 0x32505249, 12}, + {"IRBGP", "IRP3", 0x33505249, 16}, + {"RGIB", "RGI0", 0x30494752, 8}, + {"RGIB", "RGI1", 0x31494752, 10}, + {"RGIB", "RGI2", 0x32494752, 12}, + {"RGIB", "RGI3", 0x33494752, 16}, + {"RGIBP", "RGP0", 0x30504752, 8}, + {"RGIBP", "RGP1", 0x31504752, 10}, + {"RGIBP", "RGP2", 0x32504752, 12}, + {"RGIBP", "RGP3", 0x33504752, 16}, + {"RIGB", "RIG0", 0x30474952, 8}, + {"RIGB", "RIG1", 0x31474952, 10}, + {"RIGB", "RIG2", 0x32474952, 12}, + {"RIGB", "RIG3", 0x33474952, 16}, + {"RIGBP", "RIP0", 0x30504952, 8}, + {"RIGBP", "RIP1", 0x31504952, 10}, + {"RIGBP", "RIP2", 0x32504952, 12}, + {"RIGBP", "RIP3", 0x33504952, 16}, + {"BIGR", "BIG0", 0x30474942, 8}, + {"BIGR", "BIG1", 0x31474942, 10}, + {"BIGR", "BIG2", 0x32474942, 12}, + {"BIGR", "BIG3", 0x33474942, 16}, + {"BIGRP", "BIP0", 0x30504942, 8}, + {"BIGRP", "BIP1", 0x31504942, 10}, + {"BIGRP", "BIP2", 0x32504942, 12}, + {"BIGRP", "BIP3", 0x33504942, 16}, + {"GBRI", "GBI0", 0x30494247, 8}, + {"GBRI", "GBI1", 0x31494247, 10}, + {"GBRI", "GBI2", 0x32494247, 12}, + {"GBRI", "GBI3", 0x33494247, 16}, + {"GBRIP", "GBP0", 0x30504247, 8}, + {"GBRIP", "GBP1", 0x31504247, 10}, + {"GBRIP", "GBP2", 0x32504247, 12}, + {"GBRIP", "GBP3", 0x33504247, 16}, + {"IBRG", "IBR0", 0x30524249, 8}, + {"IBRG", "IBR1", 0x31524249, 10}, + {"IBRG", "IBR2", 0x32524249, 12}, + {"IBRG", "IBR3", 0x33524249, 16}, + {"IBRGP", "IBP0", 0x30504249, 8}, + {"IBRGP", "IBP1", 0x31504249, 10}, + {"IBRGP", "IBP2", 0x32504249, 12}, + {"IBRGP", "IBP3", 0x33504249, 16}, + {"BGRG_GIGI_RGBG_GIGI", "BG0I", 0x49304742, 8}, + {"BGRG_GIGI_RGBG_GIGI", "BG1I", 0x49314742, 10}, + {"BGRG_GIGI_RGBG_GIGI", "BG2I", 0x49324742, 12}, + {"BGRG_GIGI_RGBG_GIGI", "BG3I", 0x49334742, 16}, + {"BGRG_GIGI_RGBG_GIGIP", "PG0I", 0x49304750, 8}, + {"BGRG_GIGI_RGBG_GIGIP", "PG1I", 0x49314750, 10}, + {"BGRG_GIGI_RGBG_GIGIP", "PG2I", 0x49324750, 12}, + {"BGRG_GIGI_RGBG_GIGIP", "PG3I", 0x49334750, 16}, + {"GRGB_IGIG_GBGR_IGIG", "GR0I", 0x49305247, 8}, + {"GRGB_IGIG_GBGR_IGIG", "GR1I", 0x49315247, 10}, + {"GRGB_IGIG_GBGR_IGIG", "GR2I", 0x49325247, 12}, + {"GRGB_IGIG_GBGR_IGIG", "GR3I", 0x49335247, 16}, + {"GRGB_IGIG_GBGR_IGIGP", "PR0I", 0x49305250, 8}, + {"GRGB_IGIG_GBGR_IGIGP", "PR1I", 0x49315250, 10}, + {"GRGB_IGIG_GBGR_IGIGP", "PR2I", 0x49325250, 12}, + {"GRGB_IGIG_GBGR_IGIGP", "PR3I", 0x49335250, 16}, + {"RGBG_GIGI_BGRG_GIGI", "RG0I", 0x49304752, 8}, + {"RGBG_GIGI_BGRG_GIGI", "RG1I", 0x49314752, 10}, + {"RGBG_GIGI_BGRG_GIGI", "RG2I", 0x49324752, 12}, + {"RGBG_GIGI_BGRG_GIGI", "RG3I", 0x49334752, 16}, + {"RGBG_GIGI_BGRG_GIGIP", "RP0I", 0x49305052, 8}, + {"RGBG_GIGI_BGRG_GIGIP", "RP1I", 0x49315052, 10}, + {"RGBG_GIGI_BGRG_GIGIP", "RP2I", 0x49325052, 12}, + {"RGBG_GIGI_BGRG_GIGIP", "RP3I", 0x49335052, 16}, + {"GBGR_IGIG_GRGB_IGIG", "GB0I", 0x49304247, 8}, + {"GBGR_IGIG_GRGB_IGIG", "GB1I", 0x49314247, 10}, + {"GBGR_IGIG_GRGB_IGIG", "GB2I", 0x49324247, 12}, + {"GBGR_IGIG_GRGB_IGIG", "GB3I", 0x49334247, 16}, + {"GBGR_IGIG_GRGB_IGIGP", "GP0I", 0x49305047, 8}, + {"GBGR_IGIG_GRGB_IGIGP", "GP1I", 0x49315047, 10}, + {"GBGR_IGIG_GRGB_IGIGP", "GP2I", 0x49325047, 12}, + {"GBGR_IGIG_GRGB_IGIGP", "GP3I", 0x49335047, 16}, + {"GIGI_RGBG_GIGI_BGRG", "GIR0", 0x30524947, 8}, + {"GIGI_RGBG_GIGI_BGRG", "GIR1", 0x31524947, 10}, + {"GIGI_RGBG_GIGI_BGRG", "GIR2", 0x32524947, 12}, + {"GIGI_RGBG_GIGI_BGRG", "GIR3", 0x33524947, 16}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR0", 0x30525047, 8}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR1", 0x31525047, 10}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR2", 0x32525047, 12}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR3", 0x33525047, 16}, + {"IGIG_GBGR_IGIG_GRGB", "IGG0", 0x30474749, 8}, + {"IGIG_GBGR_IGIG_GRGB", "IGG1", 0x31474749, 10}, + {"IGIG_GBGR_IGIG_GRGB", "IGG2", 0x32474749, 12}, + {"IGIG_GBGR_IGIG_GRGB", "IGG3", 0x33474749, 16}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG0", 0x30475049, 8}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG1", 0x31475049, 10}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG2", 0x32475049, 12}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG3", 0x33475049, 16}, + {"GIGI_BGRG_GIGI_RGBG", "GIB0", 0x30424947, 8}, + {"GIGI_BGRG_GIGI_RGBG", "GIB1", 0x31424947, 10}, + {"GIGI_BGRG_GIGI_RGBG", "GIB2", 0x32424947, 12}, + {"GIGI_BGRG_GIGI_RGBG", "GIB3", 0x33424947, 16}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP0", 0x30504947, 8}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP1", 0x31504947, 10}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP2", 0x32504947, 12}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP3", 0x33504947, 16}, + {"IGIG_GRGB_IGIG_GBGR", "IGR0", 0x30524749, 8}, + {"IGIG_GRGB_IGIG_GBGR", "IGR1", 0x31524749, 10}, + {"IGIG_GRGB_IGIG_GBGR", "IGR2", 0x32524749, 12}, + {"IGIG_GRGB_IGIG_GBGR", "IGR3", 0x33524749, 16}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP0", 0x30504749, 8}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP1", 0x31504749, 10}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP2", 0x32504749, 12}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP3", 0x33504749, 16}, + {"RGGBPD", "RG0B", 0x42304752, 8}, + {"RGGBPD", "RG1B", 0x42314752, 10}, + {"RGGBPD", "RG2B", 0x42324752, 12}, + {"RGGBPD", "RG3B", 0x42334752, 16}, + {"BGGRPD", "BG0B", 0x42304742, 8}, + {"BGGRPD", "BG1B", 0x42314742, 10}, + {"BGGRPD", "BG2B", 0x42324742, 12}, + {"BGGRPD", "BG3B", 0x42334742, 16}, + {"GBRGPD", "GB0B", 0x42304247, 8}, + {"GBRGPD", "GB1B", 0x42314247, 10}, + {"GBRGPD", "GB2B", 0x42324247, 12}, + {"GBRGPD", "GB3B", 0x42334247, 16}, + {"GRBGPD", "GR0B", 0x42305247, 8}, + {"GRBGPD", "GR1B", 0x42315247, 10}, + {"GRBGPD", "GR2B", 0x42325247, 12}, + {"GRBGPD", "GR3B", 0x42335247, 16} +}; + +#endif/*DATA_RANGE_H_*/ diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.cpp new file mode 100644 index 0000000..768d1e3 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.cpp @@ -0,0 +1,1595 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8StaticGraphReaderAutogen.h" +#include + +StaticGraphStatus StaticGraphReader::Init(StaticReaderBinaryData& binaryGraphSettings) { + if (!binaryGraphSettings.data) + { + STATIC_GRAPH_LOG("Binary settings is empty."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* currOffset = static_cast(binaryGraphSettings.data); + _binaryHeader = *reinterpret_cast(currOffset); + + if (_binaryHeader.binaryCommonHashCode != staticGraphCommonHashCode) + { + STATIC_GRAPH_LOG("Binary hash code is not matching the static graph structure hash code. Binary should be re-created."); + return StaticGraphStatus::SG_ERROR; + } + + //Skipping BinaryHeader + + currOffset += sizeof(BinaryHeader); + + uint32_t numOfAvailablePins = 0; + DataRangeHeader dataRangeHeader = *(DataRangeHeader*)currOffset; + + for (int j = 0; j < enNumOfOutPins; j++) + numOfAvailablePins+= dataRangeHeader.NumberOfPinResolutions[j]; + + currOffset += sizeof(DataRangeHeader) + sizeof(DriverDesc) * numOfAvailablePins; + + uint32_t numOfGraphs = *(uint32_t*)currOffset; + currOffset += sizeof(numOfGraphs) + numOfGraphs * sizeof(GraphHashCode); + + _graphConfigurationHeaders = reinterpret_cast(currOffset); + currOffset += sizeof(GraphConfigurationHeader)*_binaryHeader.numberOfResolutions; + _sensorModes = reinterpret_cast(currOffset); + currOffset += sizeof(SensorMode)*_binaryHeader.numberOfSensorModes; + _configurationData = currOffset; + + return StaticGraphStatus::SG_OK; +} + +std::pair StaticGraphReader::GetGraphConfigurationHeaders() const +{ + return std::make_pair(_binaryHeader.numberOfResolutions, _graphConfigurationHeaders); +} + +GraphConfigurationKey* StaticGraphReader::GetFdGraphConfigurationKey(GraphConfigurationKey& settingsKey) const +{ + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) + { + if (settingsKey.attributes == _graphConfigurationHeaders[i].settingsKey.attributes && + (((settingsKey.preview.width != 0 && _graphConfigurationHeaders[i].settingsKey.preview.width == settingsKey.preview.width && _graphConfigurationHeaders[i].settingsKey.preview.height == settingsKey.preview.height) || + (settingsKey.video.width != 0 && _graphConfigurationHeaders[i].settingsKey.video.width == settingsKey.video.width && _graphConfigurationHeaders[i].settingsKey.video.height == settingsKey.video.height)) && + _graphConfigurationHeaders[i].settingsKey.postProcessingVideo.width != 0)) + { + return &_graphConfigurationHeaders[i].settingsKey; + } + } + return NULL; +} + +StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& settingsKey, IStaticGraphConfig** graph) +{ + if (!_graphConfigurationHeaders || !_sensorModes || !_configurationData) + { + STATIC_GRAPH_LOG("Static graph reader was not initialized properly."); + return StaticGraphStatus::SG_ERROR; + } + + if (!graph) + { + STATIC_GRAPH_LOG("Cannot get graph configuration into null parameter"); + return StaticGraphStatus::SG_ERROR; + } + + GraphConfigurationHeader* selectedGraphConfigurationHeader = nullptr; + + for (uint32_t i=0; i < _binaryHeader.numberOfResolutions; i++) + { + if (memcmp ( &_graphConfigurationHeaders[i].settingsKey, + &settingsKey, + sizeof(GraphConfigurationKey)) == 0) + { + selectedGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + STATIC_GRAPH_LOG("Static graph selected setting id - %d", selectedGraphConfigurationHeader->settingId); + + break; + + } + } + + if (!selectedGraphConfigurationHeader ) + { + STATIC_GRAPH_LOG("Resolution settings was not found for the given key."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* selectedConfigurationData = _configurationData + selectedGraphConfigurationHeader->resConfigDataOffset; + + GraphConfigurationHeader* baseGraphConfigurationHeader = nullptr; + + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) + { + if (_graphConfigurationHeaders[i].resConfigDataOffset == selectedGraphConfigurationHeader->resConfigDataOffset) + { + if (selectedGraphConfigurationHeader != &_graphConfigurationHeaders[i]) + { + baseGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + } + break; + } + } + + VirtualSinkMapping* baseSinkMappingConfiguration = reinterpret_cast(selectedConfigurationData); + + VirtualSinkMapping selectedSinkMappingConfiguration; + GetSinkMappingConfiguration(baseGraphConfigurationHeader, baseSinkMappingConfiguration, selectedGraphConfigurationHeader, &selectedSinkMappingConfiguration); + + // fetching the graph + switch (selectedGraphConfigurationHeader->graphId) + { + case 100000: + if (StaticGraph100000::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100000( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100001: + if (StaticGraph100001::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100001( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100002: + if (StaticGraph100002::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100002( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100003: + if (StaticGraph100003::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100003( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100137: + if (StaticGraph100137::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100137( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100079: + if (StaticGraph100079::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100079( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100080: + if (StaticGraph100080::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100080( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100138: + if (StaticGraph100138::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100138( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100142: + if (StaticGraph100142::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100142( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100162: + if (StaticGraph100162::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100162( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100143: + if (StaticGraph100143::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100143( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100144: + if (StaticGraph100144::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100144( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100081: + if (StaticGraph100081::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100081( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100004: + if (StaticGraph100004::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100004( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100005: + if (StaticGraph100005::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100005( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100006: + if (StaticGraph100006::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100006( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100066: + if (StaticGraph100066::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100066( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100007: + if (StaticGraph100007::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100007( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100067: + if (StaticGraph100067::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100067( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100139: + if (StaticGraph100139::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100139( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100169: + if (StaticGraph100169::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100169( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100008: + if (StaticGraph100008::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100008( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100009: + if (StaticGraph100009::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100009( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100010: + if (StaticGraph100010::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100010( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100011: + if (StaticGraph100011::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100011( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100140: + if (StaticGraph100140::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100140( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100045: + if (StaticGraph100045::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100045( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100012: + if (StaticGraph100012::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100012( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100013: + if (StaticGraph100013::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100013( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100014: + if (StaticGraph100014::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100014( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100015: + if (StaticGraph100015::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100015( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100016: + if (StaticGraph100016::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100016( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100017: + if (StaticGraph100017::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100017( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100018: + if (StaticGraph100018::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100018( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100019: + if (StaticGraph100019::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100019( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100020: + if (StaticGraph100020::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100020( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100021: + if (StaticGraph100021::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100021( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100022: + if (StaticGraph100022::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100022( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100023: + if (StaticGraph100023::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100023( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100024: + if (StaticGraph100024::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100024( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100040: + if (StaticGraph100040::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100040( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100041: + if (StaticGraph100041::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100041( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100042: + if (StaticGraph100042::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100042( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100027: + if (StaticGraph100027::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100027( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100028: + if (StaticGraph100028::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100028( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100029: + if (StaticGraph100029::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100029( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100030: + if (StaticGraph100030::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100030( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100031: + if (StaticGraph100031::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100031( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100032: + if (StaticGraph100032::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100032( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100033: + if (StaticGraph100033::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100033( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100034: + if (StaticGraph100034::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100034( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100141: + if (StaticGraph100141::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100141( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100100: + if (StaticGraph100100::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100100( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100101: + if (StaticGraph100101::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100101( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100102: + if (StaticGraph100102::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100102( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100157: + if (StaticGraph100157::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100157( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100103: + if (StaticGraph100103::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100103( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100135: + if (StaticGraph100135::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100135( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100104: + if (StaticGraph100104::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100104( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100105: + if (StaticGraph100105::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100105( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100106: + if (StaticGraph100106::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100106( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100166: + if (StaticGraph100166::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100166( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100107: + if (StaticGraph100107::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100107( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100145: + if (StaticGraph100145::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100145( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100108: + if (StaticGraph100108::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100108( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100109: + if (StaticGraph100109::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100109( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100110: + if (StaticGraph100110::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100110( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100111: + if (StaticGraph100111::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100111( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100136: + if (StaticGraph100136::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100136( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100200: + if (StaticGraph100200::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100200( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100201: + if (StaticGraph100201::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100201( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100112: + if (StaticGraph100112::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100112( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100113: + if (StaticGraph100113::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100113( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100114: + if (StaticGraph100114::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100114( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100146: + if (StaticGraph100146::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100146( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100115: + if (StaticGraph100115::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100115( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100116: + if (StaticGraph100116::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100116( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100117: + if (StaticGraph100117::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100117( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100118: + if (StaticGraph100118::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100118( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100119: + if (StaticGraph100119::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100119( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100120: + if (StaticGraph100120::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100120( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100121: + if (StaticGraph100121::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100121( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100122: + if (StaticGraph100122::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100122( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100123: + if (StaticGraph100123::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100123( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100127: + if (StaticGraph100127::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100127( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100128: + if (StaticGraph100128::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100128( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100129: + if (StaticGraph100129::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100129( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100130: + if (StaticGraph100130::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100130( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100131: + if (StaticGraph100131::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100131( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100132: + if (StaticGraph100132::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100132( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100133: + if (StaticGraph100133::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100133( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100134: + if (StaticGraph100134::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100134( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100235: + if (StaticGraph100235::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100235( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100236: + if (StaticGraph100236::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100236( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100202: + if (StaticGraph100202::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100202( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100203: + if (StaticGraph100203::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100203( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100279: + if (StaticGraph100279::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100279( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100280: + if (StaticGraph100280::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100280( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100281: + if (StaticGraph100281::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100281( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100204: + if (StaticGraph100204::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100204( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100205: + if (StaticGraph100205::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100205( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100206: + if (StaticGraph100206::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100206( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100266: + if (StaticGraph100266::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100266( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100207: + if (StaticGraph100207::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100207( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100267: + if (StaticGraph100267::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100267( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100208: + if (StaticGraph100208::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100208( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100209: + if (StaticGraph100209::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100209( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100210: + if (StaticGraph100210::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100210( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100211: + if (StaticGraph100211::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100211( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100245: + if (StaticGraph100245::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100245( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100212: + if (StaticGraph100212::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100212( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100213: + if (StaticGraph100213::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100213( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100214: + if (StaticGraph100214::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100214( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100215: + if (StaticGraph100215::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100215( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100216: + if (StaticGraph100216::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100216( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100217: + if (StaticGraph100217::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100217( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100218: + if (StaticGraph100218::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100218( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100219: + if (StaticGraph100219::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100219( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100220: + if (StaticGraph100220::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100220( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100221: + if (StaticGraph100221::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100221( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100222: + if (StaticGraph100222::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100222( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100223: + if (StaticGraph100223::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100223( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100224: + if (StaticGraph100224::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100224( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100240: + if (StaticGraph100240::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100240( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100241: + if (StaticGraph100241::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100241( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100242: + if (StaticGraph100242::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100242( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100227: + if (StaticGraph100227::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100227( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100228: + if (StaticGraph100228::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100228( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100229: + if (StaticGraph100229::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100229( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100230: + if (StaticGraph100230::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100230( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100231: + if (StaticGraph100231::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100231( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100232: + if (StaticGraph100232::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100232( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100233: + if (StaticGraph100233::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100233( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100234: + if (StaticGraph100234::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100234( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100026: + if (StaticGraph100026::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100026( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100059: + if (StaticGraph100059::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100059( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100035: + if (StaticGraph100035::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100035( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100036: + if (StaticGraph100036::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100036( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100037: + if (StaticGraph100037::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100037( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100058: + if (StaticGraph100058::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100058( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100038: + if (StaticGraph100038::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100038( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100039: + if (StaticGraph100039::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100039( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + default: + STATIC_GRAPH_LOG("Graph %d was not found", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +void StaticGraphReader::GetSinkMappingConfiguration(GraphConfigurationHeader* baseGraphConfigurationHeader, VirtualSinkMapping* baseSinkMappingConfiguration, GraphConfigurationHeader* selectedGraphConfigurationHeader, VirtualSinkMapping* selectedSinkMappingConfiguration) { + if (baseGraphConfigurationHeader == nullptr) + { + memcpy(selectedSinkMappingConfiguration, baseSinkMappingConfiguration, sizeof(VirtualSinkMapping)); + } + else + { + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == baseGraphConfigurationHeader->settingsKey.preview.height + ) + { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->preview; + } + else + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == baseGraphConfigurationHeader->settingsKey.video.height + ) + { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->video; + } + else + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height + ) + { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->postProcessingVideo; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for preview sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.video.height == baseGraphConfigurationHeader->settingsKey.preview.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview + ) + { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->preview; + } + else + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.video.height == baseGraphConfigurationHeader->settingsKey.video.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->video + ) + { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->video; + } + else + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.video.height == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->postProcessingVideo + ) + { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->postProcessingVideo; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for video sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == baseGraphConfigurationHeader->settingsKey.preview.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->preview + ) + { + selectedSinkMappingConfiguration->postProcessingVideo = baseSinkMappingConfiguration->preview; + } + else + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == baseGraphConfigurationHeader->settingsKey.video.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->video + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->video + ) + { + selectedSinkMappingConfiguration->postProcessingVideo = baseSinkMappingConfiguration->video; + } + else + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->postProcessingVideo + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->postProcessingVideo + ) + { + selectedSinkMappingConfiguration->postProcessingVideo = baseSinkMappingConfiguration->postProcessingVideo; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for postProcessingVideo sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.stills.bpp == baseGraphConfigurationHeader->settingsKey.stills.bpp && + selectedGraphConfigurationHeader->settingsKey.stills.width == baseGraphConfigurationHeader->settingsKey.stills.width && + selectedGraphConfigurationHeader->settingsKey.stills.height == baseGraphConfigurationHeader->settingsKey.stills.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->stills + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->stills + && selectedSinkMappingConfiguration->postProcessingVideo != baseSinkMappingConfiguration->stills + ) + { + selectedSinkMappingConfiguration->stills = baseSinkMappingConfiguration->stills; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for stills sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == baseGraphConfigurationHeader->settingsKey.videoIr.height + ) + { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->videoIr; + } + else + if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == baseGraphConfigurationHeader->settingsKey.previewIr.height + ) + { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->previewIr; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for videoIr sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == baseGraphConfigurationHeader->settingsKey.videoIr.height + && selectedSinkMappingConfiguration->videoIr != baseSinkMappingConfiguration->videoIr + ) + { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->videoIr; + } + else + if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == baseGraphConfigurationHeader->settingsKey.previewIr.height + && selectedSinkMappingConfiguration->videoIr != baseSinkMappingConfiguration->previewIr + ) + { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->previewIr; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for previewIr sink."); + } + + } +} diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.h new file mode 100644 index 0000000..9f6ead1 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.h @@ -0,0 +1,96 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_READER_H +#define STATIC_GRAPH_READER_H + +#include +#include "Ipu8StaticGraphBinaryAutogen.h" +#include "Ipu8StaticGraphAutogen.h" + +struct StaticReaderBinaryData { + void* data = nullptr; + uint32_t size = 0; +}; + +typedef enum +{ + enPreview, + enVideo, + enStills, + enRaw, + enIr, + enNumOfOutPins + +} DataRangePins; + +typedef struct DriverDesc { + + uint32_t format; + uint32_t width; + uint32_t height; + uint32_t fps; + +} DriverDesc; + +typedef struct DataRangeHeader { + + uint32_t NumberOfPinResolutions[enNumOfOutPins]; + +} DataRangeHeader; + +typedef struct +{ + uint32_t key; + uint32_t value; +}GraphHashCode; + +typedef struct +{ + uint32_t numOfGraphs; + GraphHashCode* hashCodes; +}GraphHashCodesTable; + +class StaticGraphReader +{ +public: + StaticGraphReader() = default; + StaticGraphStatus Init(StaticReaderBinaryData& binaryGraphSettings); + StaticGraphStatus GetStaticGraphConfig(GraphConfigurationKey& settingsKey, IStaticGraphConfig** graph); + std::pair GetGraphConfigurationHeaders() const; + GraphConfigurationKey* GetFdGraphConfigurationKey(GraphConfigurationKey& settingsKey) const; + static const uint32_t staticGraphCommonHashCode = 1110027246; // autogenerated +private: + void GetSinkMappingConfiguration(GraphConfigurationHeader* baseGraphConfigurationHeader, VirtualSinkMapping* baseSinkMappingConfiguration, + GraphConfigurationHeader* selectedGraphConfigurationHeader, VirtualSinkMapping* selectedSinkMappingConfiguration); + BinaryHeader _binaryHeader; + GraphConfigurationHeader* _graphConfigurationHeaders = nullptr; + SensorMode* _sensorModes = nullptr; + int8_t* _configurationData = nullptr; +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphTypesAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphTypesAutogen.h new file mode 100644 index 0000000..da22968 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphTypesAutogen.h @@ -0,0 +1,487 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_TYPES_H +#define STATIC_GRAPH_TYPES_H + +#ifdef STATIC_GRAPH_USE_IA_AIC_TYPES +#define STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_aic_types.h" +typedef aic::ImagingKernelGroup StaticGraphNodeKernels; +typedef aic::ia_pac_kernel_info StaticGraphPacRunKernel; +typedef aic::IaAicFragmentDesc StaticGraphFragmentDesc; +typedef aic::IaAicUpscalerFragDesc StaticGraphUpscalerFragmentDesc; +#endif + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_isp_bxt_types.h" +#include "ia_pal_types_isp_parameters_autogen.h" +#if (IA_RESOLUTION_STATIC_GRAPH_PACK != 4) + #error "Static graph resulution structs packing alignment is defferent than defined in ia_types.h" +#endif +typedef ia_binary_data StaticGraphKernelSystemApi; +typedef ia_rectangle StaticGraphKernelResCrop; +typedef ia_isp_bxt_resolution_info StaticGraphKernelRes; +typedef ia_isp_bxt_bpp_info_t StaticGraphCompKernelBpp; +typedef ia_isp_bxt_run_kernels StaticGraphRunKernel; +typedef ia_pal_system_api_io_buffer_1_4_t StaticGraphKernelSystemApiIoBuffer1_4; +typedef ia_pal_system_api_b2i_ds_1_1_t StaticGraphKernelSystemApiB2iDs1_1; +#endif + +#ifdef STATIC_GRAPH_LOG +#define SG_PRINTF(fmt, ...) do { printf(fmt, ##__VA_ARGS__); printf("\n"); } while ((void)0, 0) +#define STATIC_GRAPH_LOG(...) SG_PRINTF(__VA_ARGS__) +#else +#define STATIC_GRAPH_LOG(...) ((void)0) +#endif + +enum class NodeResourceId : uint8_t { + Lbff = 0, + SwIsys = 2, + SwSegnet = 3, + SwGdc = 4, + SwScaler = 5, + SwNntm = 6, +}; + +enum class StaticGraphStatus : uint8_t +{ + SG_OK = 0, + SG_ERROR = 1 +}; + +enum class VirtualSink : uint8_t +{ + PreviewSink, + VideoSink, + PostProcessingVideoSink, + StillsSink, + ThumbnailSink, + RawSink, + RawPdafSink, + RawDolLongSink, + RawCvSink, + VideoIrSink, + PreviewIrSink, +}; + +enum class HwSink : uint8_t +{ + Disconnected, + AeOutSink, + AfStdOutSink, + AwbStdOutSink, + AwbSatOutSink, + ImageMpSink, + ImageDpSink, + GmvMatchOutSink, + ProcessedMainSink, + CvOutputSink, + ProcessedSecondarySink, + PdafOutSink, + AwbSveOutSink, + IrAeOutSink, + IrAfStdOutSink, + IrAwbStdOutSink, + IrAwbSatOutSink, + IrMpSink, + RawIsysSink, + RawIsysCvSink, + RawIsysDolLongSink, + RawIsysPdafSink, +}; + +enum class VanishOption : uint8_t { + Full, + AfterStats, + AfterTnr, +}; +enum class SapAttributeValues { + None = 0, + SapAttribute = 1, + LongInputAttribute = 2, + ShortInputAttribute = 4, +}; +#pragma pack(push, 4) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES +// ia_isp_bxt_bpp_info_t +struct StaticGraphCompKernelBpp { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +// ia_rectangle +struct StaticGraphKernelResCrop { + int32_t left = 0; + int32_t top = 0; + int32_t right = 0; + int32_t bottom = 0; +}; + +// ia_isp_bxt_resolution_info +struct StaticGraphKernelRes { + int32_t input_width = 0; + int32_t input_height = 0; + StaticGraphKernelResCrop input_crop; + int32_t output_width = 0; + int32_t output_height = 0; + StaticGraphKernelResCrop output_crop; +}; + +// ia_pal_system_api_io_buffer_1_4_t; +// We add only the fields that are used by tests +struct StaticGraphKernelSystemApiIoBuffer1_4 { + uint32_t x_output_offset_per_stripe[4]; + uint32_t plane_start_address_per_stripe[12]; +}; + +// ia_pal_system_api_b2i_ds_1_1_t; +struct StaticGraphKernelSystemApiB2iDs1_1 { + uint8_t is_striping; +}; + +#endif +struct StaticGraphKernelBppConfiguration { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +struct StaticGraphPlaneCompressionConfiguration { + uint8_t isEnabled = 0; + uint8_t tsAlignInterval = 0; + uint16_t rowsOfTiles = 0; + uint32_t pixelsOffset = 0; + uint32_t tsOffset = 0; + uint32_t rowOfTilesStride = 0; + uint8_t bpp = 0; + uint8_t encoderPlaneId = 0; + uint8_t decoderPlaneId = 0; + uint8_t isLossy = 0; + uint8_t isFootprint = 0; + uint8_t footprintCompressionRatio = 0; + uint8_t lossyRatioPlus = 0; + uint8_t lossyRatioMins = 0; + uint8_t lossyInstUpper = 0; + uint8_t lossyInstLower = 0; + uint8_t initHistory = 0; + uint8_t initQp = 0; + uint8_t maxQp = 0; + uint8_t minQp = 0; + uint8_t windowSize = 0; + uint8_t maxQpInc = 0; + uint8_t maxQpDec = 0; + uint8_t qpIncReset = 0; + uint8_t logFootprintGuardBand = 0; +}; + +struct StaticGraphLinkCompressionConfiguration { + uint8_t isEnabled = 0; + StaticGraphPlaneCompressionConfiguration lumaCompressionConfiguration; + StaticGraphPlaneCompressionConfiguration chromaCompressionConfiguration; +}; + +struct StaticGraphLinkConfiguration { + uint32_t bufferSize = 0; + uint8_t streamingMode = 0; +}; + +struct VirtualSinkMapping { + uint8_t preview = 0; + uint8_t video = 0; + uint8_t postProcessingVideo = 0; + uint8_t stills = 0; + uint8_t thumbnail = 0; + uint8_t raw = 0; + uint8_t rawPdaf = 0; + uint8_t rawDolLong = 0; + uint8_t rawCv = 0; + uint8_t videoIr = 0; + uint8_t previewIr = 0; +}; + +struct SystemApiRecordHeader { + uint16_t systemApiUuid = 0; +}; + +#pragma pack(pop) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES + +// ia_binary_data +struct StaticGraphKernelSystemApi { + void *data; + uint32_t size; +}; + +// ia_isp_bxt_run_kernels +struct StaticGraphRunKernel { + uint32_t stream_id; + uint32_t kernel_uuid; + int32_t enable; + StaticGraphKernelRes *resolution_info; + StaticGraphKernelRes *resolution_history; + uint32_t metadata[4]; + StaticGraphCompKernelBpp bpp_info; + uint32_t output_count; + StaticGraphKernelSystemApi system_api; +}; +#endif + +#ifndef STATIC_GRAPH_USE_IA_AIC_TYPES + +struct StaticGraphUpscalerFragmentDesc { + uint16_t fragmentInputCropLeft = 0; + uint16_t fragmentInputCropRight = 0; +}; + +struct StaticGraphFragmentDesc { + uint16_t fragmentInputWidth = 0; + uint16_t fragmentOutputWidth = 0; + uint16_t fragmentStartX = 0; + union + { + StaticGraphUpscalerFragmentDesc upscalerFragDesc; + }; +}; + +// ia_pac_kernel_info +struct StaticGraphPacRunKernel { + StaticGraphRunKernel run_kernel; + StaticGraphFragmentDesc* fragment_descs; + bool fragments_defined; +}; + +// ImagingKernelGroup +struct StaticGraphNodeKernels +{ + uint32_t kernelCount; + StaticGraphPacRunKernel *kernelList; + uint32_t operationMode; + uint32_t streamId; +}; + +#endif +struct HwBitmaps { + uint32_t rbm[4] = {}; + uint32_t deb[4] = {}; + uint32_t teb[2] = {}; + uint32_t reb[4] = {}; +}; + +enum class NodeTypes : uint8_t { + Isys, + Cb, + Sw, +}; + +enum class GraphElementType : uint8_t { + // Sources + Sensor, + LscBuffer, + PdafBuffer, + SensorDolLongExposure, + LscBufferIr, + // Sinks + AeOut, + AfStdOut, + AwbStdOut, + AwbSatOut, + ImageMp, + ImageDp, + GmvMatchOut, + ProcessedMain, + CvOutput, + ProcessedSecondary, + PdafOut, + AwbSveOut, + IrAeOut, + IrAfStdOut, + IrAwbStdOut, + IrAwbSatOut, + IrMp, + RawIsys, + RawIsysCv, + RawIsysDolLong, + RawIsysPdaf, + // Outer Nodes + Isys, + LbffBayerNoGmvNoTnrNoSap, + LbffBayerWithGmvNoTnrNoSap, + SwGdc, + LbffBayerNoGmvWithTnrNoSap, + LbffBayerWithGmvWithTnrNoSap, + IsysWithCv, + SwSegnet, + LbffBayerWithGmvWithTnrWithSap, + SwScaler, + SwNntm, + LbffBayerNoGmvWithTnrWithSap, + IsysPdaf2WithCv, + LbffBayerPdaf2NoGmvWithTnrWithSap, + LbffBayerPdaf2WithTnrWithSap, + LbffBayerPdaf3NoGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap, + IsysPdaf2, + LbffBayerPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf2WithGmvWithTnrNoSap, + LbffBayerPdaf2WithGmvWithTnrWithSap, + LbffBayerPdaf3NoGmvNoTnrNoSap, + LbffBayerPdaf3WithGmvNoTnrNoSap, + LbffBayerPdaf3NoGmvWithTnrNoSap, + LbffBayerPdaf3WithGmvWithTnrNoSap, + LbffBayerPdaf3WithGmvWithTnrWithSap, + IsysDol, + LbffDol2InputsNoGmvNoTnrNoSap, + LbffDol2InputsWithGmvNoTnrNoSap, + LbffDol2InputsNoGmvWithTnrNoSap, + LbffDol2InputsWithGmvWithTnrNoSap, + LbffDolSmooth, + LbffDol3InputsNoGmvNoTnrNoSap, + LbffDol3InputsWithGmvNoTnrNoSap, + LbffDol3InputsNoGmvWithTnrNoSap, + LbffDol3InputsWithGmvWithTnrNoSap, + LbffRgbIrNoGmvNoTnrNoSap, + LbffRgbIrIrNoGmvNoTnrNoSap, + LbffRgbIrWithGmvNoTnrNoSap, + LbffRgbIrNoGmvWithTnrNoSap, + LbffRgbIrIrNoGmvWithTnrNoSap, + LbffRgbIrWithGmvWithTnrNoSap, + LbffIrNoGmvNoTnrNoSap, + LbffIrWithGmvNoTnrNoSap, + LbffIrNoGmvWithTnrNoSap, + LbffIrWithGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap, + LbffBayerNoGmvNoTnrWithSap, + LbffBayerWithGmvNoTnrWithSap, + LbffBayerNoGmvWithTnrWithOpacity, + LbffBayerPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf2WithGmvNoTnrWithSap, + LbffBayerPdaf3NoGmvNoTnrWithSap, + LbffBayerPdaf3WithGmvNoTnrWithSap, + IsysDolWithCv, + LbffDol2InputsNoGmvNoTnrWithSap, + LbffDol2InputsWithGmvNoTnrWithSap, + LbffDol2InputsNoGmvWithTnrWithSap, + LbffDol2InputsWithGmvWithTnrWithSap, + LbffDol3InputsNoGmvNoTnrWithSap, + LbffDol3InputsWithGmvNoTnrWithSap, + LbffDol3InputsNoGmvWithTnrWithSap, + LbffDol3InputsWithGmvWithTnrWithSap, + LbffRgbIrNoGmvNoTnrWithSap, + LbffRgbIrWithGmvNoTnrWithSap, + LbffRgbIrNoGmvWithTnrWithSap, + LbffRgbIrWithGmvWithTnrWithSap, + LbffIrNoGmvNoTnrWithSap, + LbffIrWithGmvNoTnrWithSap, + LbffIrNoGmvWithTnrWithSap, + LbffIrWithGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap, + WithCv, +}; + +enum class LinkType : uint8_t { + Source2Node, + Node2Node, + Node2Sink, + Node2Self, +}; + +enum class FormatType : uint8_t { + SINGLE_PL_8_P, + SINGLE_PL_8, + SINGLE_PL_8_MSB, + SINGLE_PL_10_P, + SINGLE_PL_10, + SINGLE_PL_10_MSB, + SINGLE_PL_12_P, + SINGLE_PL_12, + SINGLE_PL_12_MSB, + SINGLE_PL_16, + YUV420_8_SP_P, + YUV420_8_SP_P_REV, + YUV420_8_SP_MSB, + YUV420_8_SP_REV_MSB, + YUV420_8_SP_LSB, + YUV420_8_SP_REV_LSB, + YUV420_10_SP_P, + YUV420_10_SP_P_REV, + YUV420_10_SP_MSB, + YUV420_10_SP_REV_MSB, + YUV420_10_SP_LSB, + YUV420_10_SP_REV_LSB, + YUV420_12_SP_P, + YUV420_12_SP_P_REV, + YUV420_12_SP_MSB, + YUV420_12_SP_REV_MSB, + YUV420_12_SP_LSB, + YUV420_12_SP_REV_LSB, + YUV420_16_SP, + YUV420_16_SP_REV, + YUV420_8_FP_P, + YUV420_8_FP_P_REV, + YUV420_8_FP_MSB, + YUV420_8_FP_REV_MSB, + YUV420_8_FP_LSB, + YUV420_8_FP_REV_LSB, + YUV420_10_FP_P, + YUV420_10_FP_P_REV, + YUV420_10_FP_MSB, + YUV420_10_FP_REV_MSB, + YUV420_10_FP_LSB, + YUV420_10_FP_REV_LSB, + YUV420_12_FP_P, + YUV420_12_FP_P_REV, + YUV420_12_FP_MSB, + YUV420_12_FP_REV_MSB, + YUV420_12_FP_LSB, + YUV420_12_FP_REV_LSB, + YUV420_16_FP, + YUV420_16_FP_REV, + META_16, + YUV420_8_SP_P_GFX, + YUV420_10_SP_MSB_GFX, + YUV420_8_1P_P, + YUV422_YUYV_8_1P_P, + YUV422_8_SP_P, + YUV422_8_SP_P_REV, + META_8, + YUVRGB444_8_FP_P, + Y_8_1P_P, + RGBA_8_1P_P, + SINGLE_PL_10_MP, + SINGLE_PL_12_MP, +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.cpp new file mode 100644 index 0000000..bb09b07 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.cpp @@ -0,0 +1,581 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8TerminalDescriptorAutogen.h" + +TerminalDescriptor SW_ISYSTerminalDesc[] = +{ + { + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAME_IN", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_STREAM_IN", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_UPIPE", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 36280, // crop_bpp_adjust_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_CV", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 26150, // isys_drainer_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_PDAF", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_PDAF", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_DOL_LONG", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 50407, // is_odr_c + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_DOL_LONG", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 50407, // is_odr_c + }, +}; + +TerminalDescriptor LBFFTerminalDesc[] = +{ + { + LBFF_TERMINAL_LOAD_ALGO_CACHED, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_CACHED", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAG_SEQ", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SYSTEM, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SYSTEM", + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SR_FRAME_IN", + PAC_BUFFER_TYPE_SR_FRAME_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN_OUT, + 0, + }, + { + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_MAIN_DATA_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 52446, // ifd_pipe_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_LONG_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 24678, // ifd_pipe_long_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 4386, // ifd_pipe_short_smth_1_4 + }, + { + LBFF_TERMINAL_CONNECT_LSC_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_LSC_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 29313, // ifd_lsc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_PDAF_DATA_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 22427, // ifd_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AE_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 62556, // odr_ae_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AF_STD_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 59136, // odr_af_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_STD_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 38544, // odr_awb_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SAT_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 1248, // odr_awb_sat_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_PDAF_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 26892, // odr_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_IR_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_IR_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 60297, // odr_ir_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BURST_ISP_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BNLM_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 53535, // odr_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 51073, // ifd_gmv_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SVE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 53430, // odr_awb_sve_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DPC_PDAF_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 54812, // odr_dpc_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_MATCH_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 41148, // odr_gmv_match_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_FEATURE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 7416, // odr_gmv_feature_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 7357, // ifd_tnr_sp_bc_yuv4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_RS_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 62054, // ifd_tnr_sp_bc_rs4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 63731, // odr_tnr_sp_bc_rs4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 16295, // ifd_tnr_fp_blend_yuvnm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 5215, // odr_tnr_fp_yuvn_1_4 + }, + { + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_TNR_SCALER_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 65437, // odr_tnr_scale_fp_yuv4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_MP_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 16460, // odr_ofs_mp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_DP_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 37951, // odr_ofs_dp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BNLM_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 35263, // ifd_segmap_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_XNR_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 9241, // ifd_segmap_xnr_1_4 + }, + { + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_ACM_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 51914, // ifd_segmap_acm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 47873, // ifd_segmap_tnr_bc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 14619, // ifd_segmap_tnr_blend_1_4 + }, + { + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CAS_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 20893, // ifd_segmap_cas_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BGB_BM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BGB_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // No graphs found + }, +}; + +TerminalDescriptor SW_SEGNETTerminalDesc[] = +{ + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // sw_segnet + }, + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 0, // sw_segnet + }, +}; + +TerminalDescriptor SW_GDCTerminalDesc[] = +{ + { + SW_GDC_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 5637, // gdc7_1 + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + +TerminalDescriptor SW_SCALERTerminalDesc[] = +{ + { + SW_SCALER_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 19706, // sw_scaler + }, + { + SW_SCALER_TERMINAL_CONNECT_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 19706, // sw_scaler + }, +}; + +TerminalDescriptor SW_NNTMTerminalDesc[] = +{ + { + SW_NNTM_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 46539, // nntm_1_0 + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + +int CountOfSW_ISYSTerminalDesc = sizeof(SW_ISYSTerminalDesc) / sizeof(SW_ISYSTerminalDesc[0]); +int CountOfLBFFTerminalDesc = sizeof(LBFFTerminalDesc) / sizeof(LBFFTerminalDesc[0]); +int CountOfSW_SEGNETTerminalDesc = sizeof(SW_SEGNETTerminalDesc) / sizeof(SW_SEGNETTerminalDesc[0]); +int CountOfSW_GDCTerminalDesc = sizeof(SW_GDCTerminalDesc) / sizeof(SW_GDCTerminalDesc[0]); +int CountOfSW_SCALERTerminalDesc = sizeof(SW_SCALERTerminalDesc) / sizeof(SW_SCALERTerminalDesc[0]); +int CountOfSW_NNTMTerminalDesc = sizeof(SW_NNTMTerminalDesc) / sizeof(SW_NNTMTerminalDesc[0]); diff --git a/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.h b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.h new file mode 100644 index 0000000..1ee05e7 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.h @@ -0,0 +1,171 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once + +typedef enum _TerminalType +{ + TERMINAL_TYPE_LOAD, + TERMINAL_TYPE_CONNECT, + TERMINAL_TYPE_N +} TerminalType; + +typedef enum _PacBufferType +{ + PAC_BUFFER_TYPE_PARAM_IN, + PAC_BUFFER_TYPE_PARAM_OUT, + PAC_BUFFER_TYPE_PROGRAM, + PAC_BUFFER_TYPE_SPATIAL_IN, + PAC_BUFFER_TYPE_SPATIAL_OUT, + PAC_BUFFER_TYPE_FRAME_IN, + PAC_BUFFER_TYPE_FRAME_OUT, + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_SR_FRAME_IN, + PAC_BUFFER_TYPE_SR_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_NONE, +} PacBufferType; + +typedef enum _TerminalBufferType +{ + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_BUFFER_TYPE_N +} TerminalBufferType; + +typedef enum _TerminalDirection +{ + TERMINAL_DIR_IN, + TERMINAL_DIR_OUT, + TERMINAL_DIR_IN_OUT, + TERMINAL_DIR_N +} TerminalDirection; + +typedef struct _TerminalDescriptor +{ + int TerminalId; + TerminalType TerminalType; + const char *TerminalName; + PacBufferType PacBufferType; + TerminalBufferType TerminalBufferType; + TerminalDirection TerminalDirection; + int TerminalLinkedKernel; +} TerminalDescriptor; + +enum SW_ISYSTerminalID +{ + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, + SW_ISYS_TERMINAL_CONNECT_INPUT, + SW_ISYS_TERMINAL_CONNECT_OUTPUT, + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, +}; + +enum LBFFTerminalID +{ + LBFF_TERMINAL_LOAD_ALGO_CACHED, + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + LBFF_TERMINAL_LOAD_SYSTEM, + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, + LBFF_TERMINAL_CONNECT_LSC_INPUT, + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, + LBFF_TERMINAL_CONNECT_AE_OUTPUT, + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_IR_OUTPUT, + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_INPUT, + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, + LBFF_TERMINAL_CONNECT_BC_OUTPUT, + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, +}; + +enum SW_SEGNETTerminalID +{ + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, +}; + +enum SW_GDCTerminalID +{ + SW_GDC_TERMINAL_CONNECT_INPUT, + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, +}; + +enum SW_SCALERTerminalID +{ + SW_SCALER_TERMINAL_CONNECT_INPUT, + SW_SCALER_TERMINAL_CONNECT_OUTPUT, +}; + +enum SW_NNTMTerminalID +{ + SW_NNTM_TERMINAL_CONNECT_INPUT, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, +}; + +extern TerminalDescriptor SW_ISYSTerminalDesc[]; +extern TerminalDescriptor LBFFTerminalDesc[]; +extern TerminalDescriptor SW_SEGNETTerminalDesc[]; +extern TerminalDescriptor SW_GDCTerminalDesc[]; +extern TerminalDescriptor SW_SCALERTerminalDesc[]; +extern TerminalDescriptor SW_NNTMTerminalDesc[]; + +extern int CountOfSW_ISYSTerminalDesc; +extern int CountOfLBFFTerminalDesc; +extern int CountOfSW_SEGNETTerminalDesc; +extern int CountOfSW_GDCTerminalDesc; +extern int CountOfSW_SCALERTerminalDesc; +extern int CountOfSW_NNTMTerminalDesc; diff --git a/modules/ipu_desc/ipu8/StaticGraphAutogen.cpp b/modules/ipu_desc/ipu8/StaticGraphAutogen.cpp new file mode 100644 index 0000000..66e1638 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphAutogen.cpp @@ -0,0 +1,59503 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "StaticGraphAutogen.h" +#define CHECK_BITMAP128_BIT(bitmap, index) \ + ((bitmap[(index) / 64]) & ((uint64_t)1 << ((index) % 64))) + +/* + * External Interfaces + */ +IStaticGraphConfig::IStaticGraphConfig(SensorMode* selectedSensorMode, + VirtualSinkMapping* sinkMappingConfiguration, + int32_t graphId, int32_t settingsId) + : _selectedSensorMode(selectedSensorMode), + _graphId(graphId), + _settingsId(settingsId) { + memcpy(_sinkMappingConfiguration, sinkMappingConfiguration, sizeof(VirtualSinkMapping)); +} + +StaticGraphStatus IStaticGraphConfig::getSensorMode(SensorMode** sensorMode) { + if (!sensorMode) { + STATIC_GRAPH_LOG("Sensor mode does not exist for this setting."); + return StaticGraphStatus::SG_OK; + } + *sensorMode = _selectedSensorMode; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getGraphTopology(GraphTopology** topology) { + *topology = _selectedGraphTopology; + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus IStaticGraphConfig::getGraphId(int32_t* graphId) { + if (graphId == nullptr) { + return StaticGraphStatus::SG_ERROR; + } + + *graphId = _graphId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getSettingsId(int32_t* settingsId) { + if (settingsId == nullptr) { + return StaticGraphStatus::SG_ERROR; + } + + *settingsId = _settingsId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getVirtualSinkConnection(VirtualSink& virtualSink, + HwSink* hwSink) { + switch (virtualSink) { + case VirtualSink::PreviewSink: + *hwSink = static_cast(_sinkMappingConfiguration->preview); + break; + case VirtualSink::VideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->video); + break; + case VirtualSink::PostProcessingVideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->postProcessingVideo); + break; + case VirtualSink::StillsSink: + *hwSink = static_cast(_sinkMappingConfiguration->stills); + break; + case VirtualSink::ThumbnailSink: + *hwSink = static_cast(_sinkMappingConfiguration->thumbnail); + break; + case VirtualSink::RawSink: + *hwSink = static_cast(_sinkMappingConfiguration->raw); + break; + case VirtualSink::RawPdafSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawPdaf); + break; + case VirtualSink::RawDolLongSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawDolLong); + break; + case VirtualSink::RawCvSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawCv); + break; + case VirtualSink::VideoIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->videoIr); + break; + case VirtualSink::PreviewIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->previewIr); + break; + default: + STATIC_GRAPH_LOG("Failed to get virtual sink mapping for virtual sink %d", + static_cast(virtualSink)); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +GraphTopology::GraphTopology(GraphLink** links, int32_t numOfLinks, + VirtualSinkMapping* sinkMappingConfiguration) + : links(links), + numOfLinks(numOfLinks), + _sinkMappingConfiguration(sinkMappingConfiguration) {} + +StaticGraphStatus GraphTopology::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + // Default impl. No inner nodes in the sub-graph nodes. + (void)subGraphInnerNodeConfiguration; + return StaticGraphStatus::SG_OK; +}; + +InnerNodeOptionsFlags GraphTopology::GetInnerOptions( + SubGraphPublicInnerNodeConfiguration* publicInnerOptions) { + InnerNodeOptionsFlags res = None; + + if (publicInnerOptions) { + res |= no3A & (publicInnerOptions->no3A ? -1 : 0); + res |= noMp & (publicInnerOptions->noMp ? -1 : 0); + res |= noDp & (publicInnerOptions->noDp ? -1 : 0); + res |= noPdaf & (publicInnerOptions->noPdaf ? -1 : 0); + } + + return res; +} + +/* + * Outer Nodes + */ + +void OuterNode::Init(uint8_t nodeResourceId, NodeTypes nodeType, uint32_t kernelCount, + uint32_t operationMode, uint32_t streamId, uint8_t nodeNumberOfFragments) { + resourceId = nodeResourceId; + type = nodeType; + nodeKernels.kernelCount = kernelCount; + numberOfFragments = nodeNumberOfFragments; + if (kernelCount > 0) { + nodeKernels.kernelList = new StaticGraphPacRunKernel[kernelCount]; + for (uint32_t j = 0; j < kernelCount; j++) { + nodeKernels.kernelList[j].fragment_descs = nullptr; + } + } else { + nodeKernels.kernelList = nullptr; + } + nodeKernels.operationMode = operationMode; + nodeKernels.streamId = streamId; +} +OuterNode::~OuterNode() { + delete[] nodeKernels.kernelList; +} +void OuterNode::InitRunKernels( + uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], StaticGraphKernelRes* resolutionInfos, + uint64_t kernelsResolutionHistoryGroupBitmap[2], uint64_t fragmentDescriptorsGroupBitmap[2], + StaticGraphKernelRes* resolutionHistories, StaticGraphKernelBppConfiguration* bppInfos, + uint8_t* systemApisSizes, uint8_t* systemApiData, KernelFragments* fragmentDescriptors) { + uint8_t* systemApiDataCurrentPtr = systemApiData; + uint32_t currentResolutionHistoryIndex = 0; + uint32_t currentRcbIndex = 0; + int32_t currentFragmentsDescriptorIndex = -1; + + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) { + auto& runKernel = nodeKernels.kernelList[i].run_kernel; + runKernel.kernel_uuid = kernelsUuids[i]; + runKernel.stream_id = nodeKernels.streamId; + runKernel.enable = 1; + runKernel.output_count = 1; + if (CHECK_BITMAP128_BIT(kernelsRcbBitmap, i)) { + // RCB + runKernel.resolution_info = &resolutionInfos[currentRcbIndex]; + currentRcbIndex++; + } else { + runKernel.resolution_info = nullptr; + } + + if (CHECK_BITMAP128_BIT(kernelsResolutionHistoryGroupBitmap, i)) { + // Next resolution history group + currentResolutionHistoryIndex++; + } + runKernel.resolution_history = &resolutionHistories[currentResolutionHistoryIndex]; + + runKernel.bpp_info.input_bpp = bppInfos[i].input_bpp; + runKernel.bpp_info.output_bpp = bppInfos[i].output_bpp; + + // system API + uint32_t systemApiSize = systemApisSizes[i]; + runKernel.system_api.size = systemApiSize; + runKernel.system_api.data = systemApiSize != 0 ? systemApiDataCurrentPtr : nullptr; + + if (systemApiDataCurrentPtr) { + systemApiDataCurrentPtr = systemApiDataCurrentPtr + systemApiSize; + } + + // Metadata + runKernel.metadata[0] = 0; + runKernel.metadata[1] = 0; + runKernel.metadata[2] = 0; + runKernel.metadata[3] = 0; + + // Init fragments information + if (CHECK_BITMAP128_BIT(fragmentDescriptorsGroupBitmap, i)) { + // New group + currentFragmentsDescriptorIndex++; + } + + nodeKernels.kernelList[i].fragment_descs = + &fragmentDescriptors[currentFragmentsDescriptorIndex].fragmentDescriptors[0]; + nodeKernels.kernelList[i].fragments_defined = (numberOfFragments > 0); + } +} + +void OuterNode::SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]) { + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) { + // check the i'th bit in the bitmap + if (CHECK_BITMAP128_BIT(disabledRunKernelsBitmap, i)) { + nodeKernels.kernelList[i].run_kernel.enable = 2; // disabled + } + } +} + +uint8_t OuterNode::GetNumberOfFragments() { + return numberOfFragments; +} + +void IsysOuterNode::Init(IsysOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { is_odr_a[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{is_odr_a}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{is_odr_a}[0] } + + uint8_t systemApisSizes[1] = {0 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::Init( + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 34, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[34] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3F3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19] } + + uint8_t systemApisSizes[34] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::Init( + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FFDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], + // gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3FF3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], + // {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23] } + + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwGdcOuterNode::Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(4, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {5637 /*gdc7_1*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { gdc7_1[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{gdc7_1}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{gdc7_1}[0] } + + uint8_t systemApisSizes[1] = {0 /*gdc7_1*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::Init( + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], + // ifd_tnr_sp_bc_yuv4nm1_1_4[31], ifd_tnr_sp_bc_rs4nm1_1_4[32], + // odr_tnr_sp_bc_rs4n_1_4[35], ifd_tnr_fp_blend_yuvnm1_1_4[36], + // odr_tnr_fp_yuvn_1_4[38], tnr_scaler_fp_1_1[39], image_upscaler_1_1[40], + // odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44], + // odr_tnr_scale_fp_yuv4n_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], + // {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2}[19], + // {odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], + // {tnr7_blend_1_1}[22], {odr_tnr_fp_yuvn_1_4}[23], {tnr_scaler_fp_1_1}[24], + // {image_upscaler_1_1}[25], {cas_1_1}[26], {odr_ofs_mp_1_4}[27], + // {b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30] } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::Init( + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FFEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_gmv_1_4[31], + // gmv_statistics_1_1[32], odr_gmv_feature_1_4[33], odr_gmv_match_1_4[34], + // ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], + // odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], + // odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], + // odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], + // odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FFD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {gmv_statistics_1_1}[12], + // {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_gmv_1_4}[17], + // {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, + // tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], + // {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], + // {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], + // {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwNntmOuterNode::Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(6, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {46539 /*nntm_1_0*/}; + uint64_t kernelsRcbBitmap[] = {0x0, 0x0}; // { } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{nntm_1_0}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{nntm_1_0}[0] } + + uint8_t systemApisSizes[1] = {5 /*nntm_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, nullptr, kernelsResolutionHistoryGroupBitmap, + kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void SwScalerOuterNode::Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(5, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {19706 /*sw_scaler*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { sw_scaler[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{sw_scaler}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{sw_scaler}[0] } + + uint8_t systemApisSizes[1] = {0 /*sw_scaler*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2OuterNode::Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_b[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, + 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FFDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], + // pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3FF3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], + // {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23] } + + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FFFDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], + // pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37], ifd_gmv_1_4[38], + // gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3FFF3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], + // {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], + // {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23], {ifd_gmv_1_4}[24], + // {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27] } + + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FFEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], + // pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], + // ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], + // odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], + // odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], + // odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], + // odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FFD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], + // {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], + // {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, tnr7_bc_1_2}[23], + // {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], + // {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], + // {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], + // {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FFFEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], + // pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], ifd_gmv_1_4[35], + // gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], + // ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], + // odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], + // odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], + // odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], + // odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FFFD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], + // {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], + // {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], + // {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], + // {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_gmv_1_4}[21], + // {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[25], {ifd_tnr_sp_bc_rs4nm1_1_4}[26], {tnr7_ims_1_2, + // tnr7_bc_1_2}[27], {odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_tnr_fp_blend_yuvnm1_1_4}[29], + // {tnr7_blend_1_1}[30], {odr_tnr_fp_yuvn_1_4}[31], {tnr_scaler_fp_1_1}[32], + // {image_upscaler_1_1}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], + // {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38] } + + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FEFC001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], + // image_upscaler_1_1[27], odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], + // odr_ofs_dp_1_4[31], odr_awb_std_1_4[32], odr_awb_sat_1_4[33], + // aestatistics_2_1[34], odr_ae_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1F9C0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], + // {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], + // {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], + // {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], + // {odr_af_std_1_4}[22] } + + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FFEFC001F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], image_upscaler_1_1[27], + // odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], odr_ofs_dp_1_4[31], + // odr_awb_std_1_4[32], odr_awb_sat_1_4[33], aestatistics_2_1[34], odr_ae_1_4[35], + // odr_af_std_1_4[36], ifd_gmv_1_4[37], gmv_statistics_1_1[38], + // odr_gmv_feature_1_4[39], odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1FF9C0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], + // {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], + // {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], + // {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], + // {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], + // {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], {gmv_statistics_1_1}[24], + // {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFF7C001F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], + // odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], + // odr_af_std_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], + // odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], + // odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], + // odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], + // odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FEC0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], + // {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], + // {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], + // {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], + // {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], + // {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], + // {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], + // {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFFF7C001F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], + // odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], + // odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], + // odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], + // ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], + // ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], + // image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], + // odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FFEC0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], + // {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], + // {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], + // {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], + // {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, + // tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], + // {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], + // {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], + // {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolOuterNode::Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_c[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, + 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::Init( + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EF0007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], + // ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], + // odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], + // odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], + // lbff_crop_espa_1_4[30], image_upscaler_1_1[31], odr_ofs_mp_1_4[33], + // b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x19C000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], + // {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], + // {odr_af_std_1_4}[21] } + + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::Init( + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FEF0007FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], + // b2i_ds_1_1[29], lbff_crop_espa_1_4[30], image_upscaler_1_1[31], + // odr_ofs_mp_1_4[33], b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36], + // ifd_gmv_1_4[37], gmv_statistics_1_1[38], odr_gmv_feature_1_4[39], + // odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1F9C000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14], + // {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], + // {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], + // {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], + // {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], + // {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::Init( + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECF70007FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], + // b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], + // ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], + // odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], + // odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], + // odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], + // odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919EC000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], + // {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], + // {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], + // {odr_af_std_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2}[21], + // {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], + // {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], + // {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], + // {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::Init( + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFF70007FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], + // b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], + // ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], + // odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], + // ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], + // ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], + // image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], + // odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FEC000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], + // {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], + // {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], + // {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], + // {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], + // {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, + // tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], + // {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], + // {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], + // {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDolSmoothOuterNode::Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 8, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[8] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, 53535 /*odr_bnlm_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x81, 0x0}; // { ifd_pipe_1_4[0], odr_bnlm_1_4[7] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, + // bnlm_3_4, odr_bnlm_1_4}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x83, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, + // bnlm_3_4}[1], {odr_bnlm_1_4}[2] } + + uint8_t systemApisSizes[8] = { + 220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 220 /*odr_bnlm_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[6].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::Init( + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], + // lbff_crop_espa_1_4[31], image_upscaler_1_1[32], odr_ofs_mp_1_4[34], + // b2i_ds_output_1_1[35], odr_ofs_dp_1_4[36], odr_af_std_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x338001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], + // {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], + // {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22] } + + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::Init( + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FDE000FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], + // image_upscaler_1_1[32], odr_ofs_mp_1_4[34], b2i_ds_output_1_1[35], + // odr_ofs_dp_1_4[36], odr_af_std_1_4[37], ifd_gmv_1_4[38], gmv_statistics_1_1[39], + // odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3F38001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], {odr_gmv_feature_1_4}[18], + // {odr_gmv_match_1_4}[19] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], + // {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], + // {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], + // {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::Init( + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9EE000FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], + // tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], + // ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], + // ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], + // image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], + // odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233D8001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], + // {odr_af_std_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[18], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], + // {odr_tnr_scale_fp_yuv4n_1_4}[21] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], + // {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], + // {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], + // {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], + // {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], + // {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::Init( + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FEE000FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], + // tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_gmv_1_4[35], + // gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], + // ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], + // odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], + // odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], + // odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], + // odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FD8001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], + // {odr_af_std_1_4}[13], {ifd_gmv_1_4}[14], {gmv_statistics_1_1}[15], + // {odr_gmv_feature_1_4}[16], {odr_gmv_match_1_4}[17], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[22], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[23], {odr_ofs_dp_1_4}[24], + // {odr_tnr_scale_fp_yuv4n_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], + // {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], + // {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, + // tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], + // {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], + // {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], + // {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::Init( + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 36, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[36] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xFDF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], + // odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xF38000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], + // {odr_ae_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], + // {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], + // {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21] } + + uint8_t systemApisSizes[36] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::Init( + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 32, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[32] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xFF7E0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], + // fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], + // image_upscaler_1_1[22], odr_ofs_mp_1_4[24], b2i_ds_output_1_1[25], + // odr_ofs_dp_1_4[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], + // aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xFCE0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, + // glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], + // {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFE001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, + // csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], + // {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], + // {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], + // {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], + // {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18] } + + uint8_t systemApisSizes[32] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::Init( + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 40, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[40] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xFFDF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], + // odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35], + // ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], + // odr_gmv_match_1_4[39] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xFF38000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], + // {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], + // {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], + // {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], + // {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], + // {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + + uint8_t systemApisSizes[40] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::Init( + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xF767EF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], + // ifd_tnr_sp_bc_yuv4nm1_1_4[33], ifd_tnr_sp_bc_rs4nm1_1_4[34], + // odr_tnr_sp_bc_rs4n_1_4[37], ifd_tnr_fp_blend_yuvnm1_1_4[38], + // odr_tnr_fp_yuvn_1_4[40], tnr_scaler_fp_1_1[41], image_upscaler_1_1[42], + // odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46], + // odr_tnr_scale_fp_yuv4n_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xC8CFD8000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], + // {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFEFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], + // {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, + // tnr7_bc_1_2}[21], {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], + // {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], + // {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], + // {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::Init( + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xF767FBE0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], + // fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], tnr_scaler_lb_1_1[23], + // odr_awb_std_1_4[24], odr_awb_sat_1_4[25], aestatistics_2_1[26], odr_ae_1_4[27], + // odr_af_std_1_4[28], ifd_tnr_sp_bc_yuv4nm1_1_4[29], ifd_tnr_sp_bc_rs4nm1_1_4[30], + // odr_tnr_sp_bc_rs4n_1_4[33], ifd_tnr_fp_blend_yuvnm1_1_4[34], + // odr_tnr_fp_yuvn_1_4[36], tnr_scaler_fp_1_1[37], image_upscaler_1_1[38], + // odr_ofs_mp_1_4[40], b2i_ds_output_1_1[41], odr_ofs_dp_1_4[42], + // odr_tnr_scale_fp_yuv4n_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xC8CFF60001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, + // glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], + // {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], + // {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], + // {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFEFFFE001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, + // glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], + // {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, + // tnr7_bc_1_2}[18], {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], + // {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], + // {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::Init( + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 52, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[52] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xF767FEF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], + // ifd_gmv_1_4[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], + // odr_gmv_match_1_4[36], ifd_tnr_sp_bc_yuv4nm1_1_4[37], + // ifd_tnr_sp_bc_rs4nm1_1_4[38], odr_tnr_sp_bc_rs4n_1_4[41], + // ifd_tnr_fp_blend_yuvnm1_1_4[42], odr_tnr_fp_yuvn_1_4[44], tnr_scaler_fp_1_1[45], + // image_upscaler_1_1[46], odr_ofs_mp_1_4[48], b2i_ds_output_1_1[49], + // odr_ofs_dp_1_4[50], odr_tnr_scale_fp_yuv4n_1_4[51] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xC8CFFD8000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], + // {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFEFFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], + // {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], + // {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, + // tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], + // {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], + // {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], + // {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + + uint8_t systemApisSizes[52] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::Init( + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 33, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[33] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FEFC0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], + // image_upscaler_1_1[23], odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], + // odr_ofs_dp_1_4[27], odr_awb_std_1_4[28], odr_awb_sat_1_4[29], + // aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1F9C0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], + // {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], + // {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], + // {odr_af_std_1_4}[18] } + + uint8_t systemApisSizes[33] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::Init( + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FFEFC0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], image_upscaler_1_1[23], + // odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], odr_ofs_dp_1_4[27], + // odr_awb_std_1_4[28], odr_awb_sat_1_4[29], aestatistics_2_1[30], odr_ae_1_4[31], + // odr_af_std_1_4[32], ifd_gmv_1_4[33], gmv_statistics_1_1[34], + // odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1FF9C0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], + // {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], + // {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], + // {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], + // {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22] } + + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::Init( + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFF7C0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], + // odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], + // odr_af_std_1_4[29], ifd_tnr_sp_bc_yuv4nm1_1_4[30], ifd_tnr_sp_bc_rs4nm1_1_4[31], + // odr_tnr_sp_bc_rs4n_1_4[34], ifd_tnr_fp_blend_yuvnm1_1_4[35], + // odr_tnr_fp_yuvn_1_4[37], tnr_scaler_fp_1_1[38], image_upscaler_1_1[39], + // odr_ofs_mp_1_4[41], b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43], + // odr_tnr_scale_fp_yuv4n_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FEC0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], + // {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], + // {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], + // {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], + // {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, tnr7_bc_1_2}[18], + // {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], + // {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], + // {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::Init( + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFFF7C0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], + // odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], + // odr_af_std_1_4[29], ifd_gmv_1_4[30], gmv_statistics_1_1[31], + // odr_gmv_feature_1_4[32], odr_gmv_match_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], + // ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], + // ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], + // image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], + // odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FFEC0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], + // {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], + // {gmv_statistics_1_1}[12], {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], + // {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], + // {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], + // {odr_gmv_feature_1_4}[18], {odr_gmv_match_1_4}[19], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, + // tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], + // {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], + // {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], + // {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 39, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[39] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7FFBF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], + // b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], + // odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], + // ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x7FE70000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], + // {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], + // {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], + // {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], + // {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], + // {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], + // {odr_pdaf_1_4}[24] } + + uint8_t systemApisSizes[39] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 43, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[43] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7FFFBF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], + // b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], + // odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], + // ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38], + // ifd_gmv_1_4[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], + // odr_gmv_match_1_4[42] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x7FFE70000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], + // {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], + // {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], + // {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FFFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], + // {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], + // {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], + // {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], + // {odr_pdaf_1_4}[24], {ifd_gmv_1_4}[25], {gmv_statistics_1_1}[26], + // {odr_gmv_feature_1_4}[27], {odr_gmv_match_1_4}[28] } + + uint8_t systemApisSizes[43] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7BB3FFDF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], + // odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], + // ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], + // ifd_tnr_sp_bc_yuv4nm1_1_4[36], ifd_tnr_sp_bc_rs4nm1_1_4[37], + // odr_tnr_sp_bc_rs4n_1_4[40], ifd_tnr_fp_blend_yuvnm1_1_4[41], + // odr_tnr_fp_yuvn_1_4[43], tnr_scaler_fp_1_1[44], image_upscaler_1_1[45], + // odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49], + // odr_tnr_scale_fp_yuv4n_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x6467FFB0000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], + // {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], + // {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], + // {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FF7FFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], + // {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], + // {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], + // {odr_pdaf_1_4}[21], {ifd_tnr_sp_bc_yuv4nm1_1_4}[22], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[23], {tnr7_ims_1_2, tnr7_bc_1_2}[24], + // {odr_tnr_sp_bc_rs4n_1_4}[25], {ifd_tnr_fp_blend_yuvnm1_1_4}[26], + // {tnr7_blend_1_1}[27], {odr_tnr_fp_yuvn_1_4}[28], {tnr_scaler_fp_1_1}[29], + // {image_upscaler_1_1}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], + // {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34], {odr_tnr_scale_fp_yuv4n_1_4}[35] } + + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 55, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[55] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7BB3FFFDF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], + // odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], + // ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], + // ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], + // odr_gmv_match_1_4[39], ifd_tnr_sp_bc_yuv4nm1_1_4[40], + // ifd_tnr_sp_bc_rs4nm1_1_4[41], odr_tnr_sp_bc_rs4n_1_4[44], + // ifd_tnr_fp_blend_yuvnm1_1_4[45], odr_tnr_fp_yuvn_1_4[47], tnr_scaler_fp_1_1[48], + // image_upscaler_1_1[49], odr_ofs_mp_1_4[51], b2i_ds_output_1_1[52], + // odr_ofs_dp_1_4[53], odr_tnr_scale_fp_yuv4n_1_4[54] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x6467FFFB0000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], + // {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], + // {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], + // {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], + // {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], + // {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FF7FFFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], + // {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], + // {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], + // {odr_pdaf_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], + // {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[26], {ifd_tnr_sp_bc_rs4nm1_1_4}[27], {tnr7_ims_1_2, + // tnr7_bc_1_2}[28], {odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_tnr_fp_blend_yuvnm1_1_4}[30], + // {tnr7_blend_1_1}[31], {odr_tnr_fp_yuvn_1_4}[32], {tnr_scaler_fp_1_1}[33], + // {image_upscaler_1_1}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], + // {b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38], {odr_tnr_scale_fp_yuv4n_1_4}[39] } + + uint8_t systemApisSizes[55] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysWithCvOuterNode::Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 4, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[4] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, + 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0xB, + 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xE, + 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xF, + 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + + uint8_t systemApisSizes[4] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, + 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void SwSegnetOuterNode::Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(3, NodeTypes::Sw, 0, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::Init( + LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BE3187FE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_segmap_bnlm_1_4[17], + // smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], + // ifd_segmap_acm_1_4[28], smurf_acm_1_0[29], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], + // image_upscaler_1_1[35], ifd_segmap_cas_1_4[36], smurf_cas_1_0[37], + // odr_ofs_mp_1_4[39], b2i_ds_output_1_1[40], odr_ofs_dp_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27C738FF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], + // {ifd_segmap_bnlm_1_4}[9], {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[11], {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], + // {xnr_5_4, vcr_3_1, glim_2_0}[14], {ifd_segmap_acm_1_4}[15], {smurf_acm_1_0}[16], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], + // {image_upscaler_1_1}[19], {ifd_segmap_cas_1_4}[20], {smurf_cas_1_0}[21], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE738FFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {ifd_segmap_cas_1_4}[25], {smurf_cas_1_0}[26], + // {cas_1_1}[27], {odr_ofs_mp_1_4}[28], {b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] + // } + + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::Init( + LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BFC630FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], + // ifd_segmap_bnlm_1_4[18], smurf_bnlm_1_0[19], ifd_segmap_xnr_1_4[24], + // smurf_xnr_1_0[25], ifd_segmap_acm_1_4[29], smurf_acm_1_0[30], b2i_ds_1_1[34], + // lbff_crop_espa_1_4[35], image_upscaler_1_1[36], gmv_statistics_1_1[37], + // odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39], ifd_segmap_cas_1_4[40], + // smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27F8E71FF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], + // {ifd_segmap_bnlm_1_4}[10], {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[12], {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], + // {xnr_5_4, vcr_3_1, glim_2_0}[15], {ifd_segmap_acm_1_4}[16], {smurf_acm_1_0}[17], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], + // {image_upscaler_1_1}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], + // {odr_gmv_match_1_4}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFCE71FFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1}[22], {b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {image_upscaler_1_1}[25], {gmv_statistics_1_1}[26], {odr_gmv_feature_1_4}[27], + // {odr_gmv_match_1_4}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], + // {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] + // } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[20].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::Init( + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 58, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[58] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF76B18C3FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], + // ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], + // ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], tnr_scaler_lb_1_1[39], + // ifd_segmap_tnr_bc_1_4[41], smurf_tnr_bc_1_0[42], odr_tnr_sp_bc_rs4n_1_4[44], + // ifd_segmap_tnr_blend_1_4[45], smurf_tnr_blend_1_0[46], odr_tnr_fp_yuvn_1_4[48], + // tnr_scaler_fp_1_1[49], image_upscaler_1_1[50], odr_tnr_scale_fp_yuv4n_1_4[51], + // ifd_segmap_cas_1_4[52], smurf_cas_1_0[53], odr_ofs_mp_1_4[55], + // b2i_ds_output_1_1[56], odr_ofs_dp_1_4[57] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EF639C7FF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], {ifd_tnr_sp_bc_rs4nm1_1_4}[10], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[11], {ifd_segmap_bnlm_1_4}[12], + // {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], + // {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], + // {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[22], {tnr7_ims_1_2}[23], {ifd_segmap_tnr_bc_1_4}[24], + // {smurf_tnr_bc_1_0}[25], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[26], + // {ifd_segmap_tnr_blend_1_4}[27], {smurf_tnr_blend_1_0}[28], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[29], + // {odr_tnr_scale_fp_yuv4n_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF39C7FFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], + // {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1}[27], + // {tnr_scaler_lb_1_1}[28], {tnr7_ims_1_2}[29], {ifd_segmap_tnr_bc_1_4}[30], + // {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2}[32], {odr_tnr_sp_bc_rs4n_1_4}[33], + // {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1}[36], + // {odr_tnr_fp_yuvn_1_4}[37], {tnr_scaler_fp_1_1}[38], {image_upscaler_1_1}[39], + // {odr_tnr_scale_fp_yuv4n_1_4}[40], {ifd_segmap_cas_1_4}[41], {smurf_cas_1_0}[42], + // {cas_1_1}[43], {odr_ofs_mp_1_4}[44], {b2i_ds_output_1_1}[45], {odr_ofs_dp_1_4}[46] + // } + + uint8_t systemApisSizes[58] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::Init( + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF77D63187FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], + // ifd_tnr_sp_bc_yuv4nm1_1_4[18], ifd_tnr_sp_bc_rs4nm1_1_4[19], + // ifd_tnr_fp_blend_yuvnm1_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], + // ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], + // smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], tnr_scaler_lb_1_1[40], + // gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], + // ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], + // ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], + // tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], + // ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], + // b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EFEC738FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], + // {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], + // {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], + // {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[23], {tnr7_ims_1_2}[24], {gmv_statistics_1_1}[25], + // {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFFE738FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], + // {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], + // {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], + // {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], + // {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {tnr7_spatial_1_1}[28], + // {tnr_scaler_lb_1_1}[29], {tnr7_ims_1_2}[30], {gmv_statistics_1_1}[31], + // {odr_gmv_feature_1_4}[32], {odr_gmv_match_1_4}[33], {ifd_segmap_tnr_bc_1_4}[34], + // {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], + // {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], + // {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], + // {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], + // {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] + // } + + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2WithCvOuterNode::Init( + IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, + 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_b[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_b}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_b}[4] } + + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, + 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BE3187FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_segmap_bnlm_1_4[21], + // smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], + // ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], + // image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], + // odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27C738FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE738FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], + // {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], + // {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], + // {image_upscaler_1_1}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], + // {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] + // } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BFC630FFFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], + // ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], + // smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], + // lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], + // odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], + // smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27F8E71FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], + // {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFCE71FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_gmv_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], + // {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], + // {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], + // {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], {gmv_statistics_1_1}[30], + // {odr_gmv_feature_1_4}[31], {odr_gmv_match_1_4}[32], {ifd_segmap_cas_1_4}[33], + // {smurf_cas_1_0}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], {b2i_ds_output_1_1}[37], + // {odr_ofs_dp_1_4}[38] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF76B18C3FFFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], + // ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], + // ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], + // ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], + // smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], + // ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], + // ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], + // tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], + // ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], + // b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EF639C7FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF39C7FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], + // {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], + // {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], + // {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], + // {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], + // {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {ifd_segmap_tnr_bc_1_4}[34], + // {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], + // {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], + // {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], + // {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], + // {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] + // } + + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xBF77D63187FFFE31, + 0x3}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], + // ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], + // ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], + // ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], + // smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], + // gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], + // ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], + // ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], + // tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], + // ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], + // b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x78EFEC738FFFF062, + 0x2}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], + // {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], + // {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], + // {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], + // {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], + // {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], + // {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], + // {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFE738FFFFE73, + 0x3}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_gmv_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], + // {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], + // {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], + // {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], + // {gmv_statistics_1_1}[35], {odr_gmv_feature_1_4}[36], {odr_gmv_match_1_4}[37], + // {ifd_segmap_tnr_bc_1_4}[38], {smurf_tnr_bc_1_0}[39], {tnr7_bc_1_2}[40], + // {odr_tnr_sp_bc_rs4n_1_4}[41], {ifd_segmap_tnr_blend_1_4}[42], + // {smurf_tnr_blend_1_0}[43], {tnr7_blend_1_1}[44], {odr_tnr_fp_yuvn_1_4}[45], + // {tnr_scaler_fp_1_1}[46], {image_upscaler_1_1}[47], + // {odr_tnr_scale_fp_yuv4n_1_4}[48], {ifd_segmap_cas_1_4}[49], {smurf_cas_1_0}[50], + // {cas_1_1}[51], {odr_ofs_mp_1_4}[52], {b2i_ds_output_1_1}[53], {odr_ofs_dp_1_4}[54] + // } + + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DF18C3FF1F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], + // ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], + // b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13E39C7F83C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], + // {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], + // {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], + // {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], + // {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], + // {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF39C7FF3F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], + // {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], + // {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], + // {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], + // {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] + // } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFE3187FF1F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], + // smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], + // ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], + // image_upscaler_1_1[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], + // odr_gmv_match_1_4[42], ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], + // odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13FC738FF83C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], + // {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], + // {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], + // {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], + // {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], + // {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFE738FFF3F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], + // {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], + // {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], + // {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], + // {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], + // {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], + // {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] + // } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBB58C61FFF1F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], + // ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], + // ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], + // smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], + // lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], ifd_segmap_tnr_bc_1_4[44], + // smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], ifd_segmap_tnr_blend_1_4[48], + // smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], tnr_scaler_fp_1_1[52], + // image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], ifd_segmap_cas_1_4[55], + // smurf_cas_1_0[56], odr_ofs_mp_1_4[58], b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77B1CE3FF83C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], + // {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], + // {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], + // {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFF9CE3FFF3F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], + // {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], + // {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], + // {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], + // {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], + // {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], + // {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], + // {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], + // {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], + // {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], + // {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] + // } + + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xDFBBEB18C3FFF1F1, + 0x1}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], + // ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], + // ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], + // ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], + // smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], + // gmv_statistics_1_1[45], odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], + // ifd_segmap_tnr_bc_1_4[48], smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], + // ifd_segmap_tnr_blend_1_4[52], smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], + // tnr_scaler_fp_1_1[56], image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], + // ifd_segmap_cas_1_4[59], smurf_cas_1_0[60], odr_ofs_mp_1_4[62], + // b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3C77F639C7FF83C2, + 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], + // {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], + // {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], + // {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], + // {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], + // {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFF39C7FFF3F3, + 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], + // {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], + // {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], + // {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], + // {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], + // {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {gmv_statistics_1_1}[34], + // {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], {ifd_segmap_tnr_bc_1_4}[37], + // {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], {odr_tnr_sp_bc_rs4n_1_4}[40], + // {ifd_segmap_tnr_blend_1_4}[41], {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], + // {odr_tnr_fp_yuvn_1_4}[44], {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], + // {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], + // {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] + // } + + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolWithCvOuterNode::Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, + 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_c[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_c}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_c}[4] } + + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, + 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::Init( + LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DF18C3C7FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], + // ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], + // b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13E39C78FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], + // {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], + // {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], + // {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], + // {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF39C7CFFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], + // {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], + // {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], + // {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], + // {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], + // {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1}[29], + // {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32] } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::Init( + LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFE3187C7FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], + // ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], + // smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], + // gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42], + // ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], odr_ofs_mp_1_4[46], + // b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13FC738F8FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], + // {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], + // {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], + // {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], + // {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFE738FCFFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], + // {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], + // {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], + // {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], + // {image_upscaler_1_1}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], + // {odr_gmv_match_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], + // {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] + // } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::Init( + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBB58C61FC7FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], + // ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], + // ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], + // smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], + // ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], + // ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], + // tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], + // ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], + // b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77B1CE3F8FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], + // {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], + // {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], + // {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFF9CE3FCFFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {ifd_segmap_bnlm_1_4}[18], + // {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], + // {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], + // {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], + // {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {tnr7_spatial_1_1}[29], + // {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], {ifd_segmap_tnr_bc_1_4}[32], + // {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], {odr_tnr_sp_bc_rs4n_1_4}[35], + // {ifd_segmap_tnr_blend_1_4}[36], {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], + // {odr_tnr_fp_yuvn_1_4}[39], {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], + // {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], + // {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] + // } + + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::Init( + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xDFBBEB18C3FC7FC3, + 0x1}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], + // ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], + // ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], + // smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], + // lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], gmv_statistics_1_1[45], + // odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], ifd_segmap_tnr_bc_1_4[48], + // smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], ifd_segmap_tnr_blend_1_4[52], + // smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], tnr_scaler_fp_1_1[56], + // image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], ifd_segmap_cas_1_4[59], + // smurf_cas_1_0[60], odr_ofs_mp_1_4[62], b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3C77F639C7F8FE06, + 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], + // {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], + // {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], + // {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], + // {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], + // {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], + // {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], + // {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFF39C7FCFFC7, + 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], + // {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], + // {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], + // {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], + // {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], + // {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {gmv_statistics_1_1}[33], + // {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], {ifd_segmap_tnr_bc_1_4}[36], + // {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], {odr_tnr_sp_bc_rs4n_1_4}[39], + // {ifd_segmap_tnr_blend_1_4}[40], {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], + // {odr_tnr_fp_yuvn_1_4}[43], {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], + // {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], + // {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] + // } + + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::Init( + LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BE31878FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_segmap_bnlm_1_4[21], + // smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], + // ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], + // image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], + // odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27C738F1FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_segmap_bnlm_1_4}[12], + // {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], + // {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], + // {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], + // {ifd_segmap_cas_1_4}[23], {smurf_cas_1_0}[24], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[25], {odr_ofs_dp_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE738F9FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], + // {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], + // {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], + // {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], + // {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] + // } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::Init( + LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BFC630F8FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], + // ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], + // smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], + // lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], + // odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], + // smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27F8E71F1FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], + // {odr_gmv_match_1_4}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFCE71F9FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_gmv_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], + // {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], + // {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], + // {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], + // {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], + // {smurf_cas_1_0}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], + // {odr_ofs_dp_1_4}[37] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::Init( + LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF76B18C3F8FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], + // ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], + // ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], + // ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], + // smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], + // ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], + // ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], + // tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], + // ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], + // b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EF639C7F1FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], + // {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], + // {ifd_segmap_tnr_bc_1_4}[27], {smurf_tnr_bc_1_0}[28], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_segmap_tnr_blend_1_4}[30], + // {smurf_tnr_blend_1_0}[31], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33], + // {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF39C7F9FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], + // {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], + // {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], + // {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], + // {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], + // {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], + // {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], + // {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], + // {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], + // {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], + // {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] + // } + + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::Init( + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xBF77D63187F8FF87, + 0x3}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], + // ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], + // ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], + // ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], + // smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], + // gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], + // ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], + // ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], + // tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], + // ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], + // b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x78EFEC738FF1FC0E, + 0x2}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {gmv_statistics_1_1}[28], + // {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_tnr_bc_1_4}[31], + // {smurf_tnr_bc_1_0}[32], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[33], + // {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[36], + // {odr_tnr_scale_fp_yuv4n_1_4}[37], {ifd_segmap_cas_1_4}[38], {smurf_cas_1_0}[39], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[40], {odr_ofs_dp_1_4}[41] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFE738FF9FF8F, + 0x3}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_gmv_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], + // {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], + // {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], + // {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], + // {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], + // {gmv_statistics_1_1}[34], {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], + // {ifd_segmap_tnr_bc_1_4}[37], {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], + // {odr_tnr_sp_bc_rs4n_1_4}[40], {ifd_segmap_tnr_blend_1_4}[41], + // {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], {odr_tnr_fp_yuvn_1_4}[44], + // {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], + // {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], + // {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] + // } + + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::Init( + LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEF8C61FC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], + // ifd_segmap_xnr_1_4[25], smurf_xnr_1_0[26], ifd_segmap_acm_1_4[30], + // smurf_acm_1_0[31], b2i_ds_1_1[35], lbff_crop_espa_1_4[36], image_upscaler_1_1[37], + // ifd_segmap_cas_1_4[38], smurf_cas_1_0[39], odr_ofs_mp_1_4[41], + // b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9F1CE3F0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], + // {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], + // {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFF9CE3FCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], + // {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], + // {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], {b2i_ds_1_1}[24], + // {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], {ifd_segmap_cas_1_4}[27], + // {smurf_cas_1_0}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], + // {odr_ofs_dp_1_4}[32] } + + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::Init( + LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEFF18C3FC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], + // gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41], + // ifd_segmap_cas_1_4[42], smurf_cas_1_0[43], odr_ofs_mp_1_4[45], + // b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9FE39C7F0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], + // {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], + // {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], + // {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], + // {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], + // {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], + // {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFF39C7FCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], + // {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], + // {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], + // {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1}[33], + // {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::Init( + LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 60, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[60] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEFDDAC630FFC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_tnr_sp_bc_yuv4nm1_1_4[19], ifd_tnr_sp_bc_rs4nm1_1_4[20], + // ifd_tnr_fp_blend_yuvnm1_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], + // ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], + // smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], tnr_scaler_lb_1_1[41], + // ifd_segmap_tnr_bc_1_4[43], smurf_tnr_bc_1_0[44], odr_tnr_sp_bc_rs4n_1_4[46], + // ifd_segmap_tnr_blend_1_4[47], smurf_tnr_blend_1_0[48], odr_tnr_fp_yuvn_1_4[50], + // tnr_scaler_fp_1_1[51], image_upscaler_1_1[52], odr_tnr_scale_fp_yuv4n_1_4[53], + // ifd_segmap_cas_1_4[54], smurf_cas_1_0[55], odr_ofs_mp_1_4[57], + // b2i_ds_output_1_1[58], odr_ofs_dp_1_4[59] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9E3BD8E71FF0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], + // {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], + // {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], + // {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], + // {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], + // {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], + // {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFCE71FFCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], + // {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], + // {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], + // {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], + // {tnr7_spatial_1_1}[29], {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], + // {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], + // {odr_tnr_sp_bc_rs4n_1_4}[35], {ifd_segmap_tnr_blend_1_4}[36], + // {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], {odr_tnr_fp_yuvn_1_4}[39], + // {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], + // {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], + // {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] + // } + + uint8_t systemApisSizes[60] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::Init( + LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 64, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[64] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEFDDF58C61FFC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], + // ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], + // ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], + // smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], + // lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], gmv_statistics_1_1[44], + // odr_gmv_feature_1_4[45], odr_gmv_match_1_4[46], ifd_segmap_tnr_bc_1_4[47], + // smurf_tnr_bc_1_0[48], odr_tnr_sp_bc_rs4n_1_4[50], ifd_segmap_tnr_blend_1_4[51], + // smurf_tnr_blend_1_0[52], odr_tnr_fp_yuvn_1_4[54], tnr_scaler_fp_1_1[55], + // image_upscaler_1_1[56], odr_tnr_scale_fp_yuv4n_1_4[57], ifd_segmap_cas_1_4[58], + // smurf_cas_1_0[59], odr_ofs_mp_1_4[61], b2i_ds_output_1_1[62], odr_ofs_dp_1_4[63] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9E3BFB1CE3FF0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], + // {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], + // {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], + // {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], + // {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], + // {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFF9CE3FFCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], + // {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], + // {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], + // {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], + // {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], + // {gmv_statistics_1_1}[33], {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], + // {ifd_segmap_tnr_bc_1_4}[36], {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], + // {odr_tnr_sp_bc_rs4n_1_4}[39], {ifd_segmap_tnr_blend_1_4}[40], + // {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], {odr_tnr_fp_yuvn_1_4}[43], + // {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], + // {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], + // {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] + // } + + uint8_t systemApisSizes[64] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::Init( + LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DF18C3FF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_segmap_bnlm_1_4[16], smurf_bnlm_1_0[17], + // ifd_segmap_xnr_1_4[22], smurf_xnr_1_0[23], ifd_segmap_acm_1_4[27], + // smurf_acm_1_0[28], b2i_ds_1_1[32], lbff_crop_espa_1_4[33], image_upscaler_1_1[34], + // ifd_segmap_cas_1_4[35], smurf_cas_1_0[36], odr_ofs_mp_1_4[38], + // b2i_ds_output_1_1[39], odr_ofs_dp_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13E39C7F81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_segmap_bnlm_1_4}[9], + // {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[11], + // {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], {xnr_5_4, vcr_3_1, glim_2_0}[14], + // {ifd_segmap_acm_1_4}[15], {smurf_acm_1_0}[16], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], {image_upscaler_1_1}[19], + // {ifd_segmap_cas_1_4}[20], {smurf_cas_1_0}[21], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF39C7FF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], + // {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], + // {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], + // {acm_1_2, gammatm_v4, csc_1_1}[20], {b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], + // {cas_1_1}[26], {odr_ofs_mp_1_4}[27], {b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] + // } + + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::Init( + LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFE3187FF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], ifd_segmap_bnlm_1_4[17], + // smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], + // ifd_segmap_acm_1_4[28], smurf_acm_1_0[29], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], + // image_upscaler_1_1[35], gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], + // odr_gmv_match_1_4[38], ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], + // odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13FC738FF81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_segmap_bnlm_1_4}[10], + // {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[12], + // {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], {xnr_5_4, vcr_3_1, glim_2_0}[15], + // {ifd_segmap_acm_1_4}[16], {smurf_acm_1_0}[17], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {image_upscaler_1_1}[20], + // {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], + // {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFE738FFF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], + // {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], + // {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] + // } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::Init( + LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 57, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[57] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBB58C61FFF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_tnr_sp_bc_yuv4nm1_1_4[16], + // ifd_tnr_sp_bc_rs4nm1_1_4[17], ifd_tnr_fp_blend_yuvnm1_1_4[18], + // ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], ifd_segmap_xnr_1_4[25], + // smurf_xnr_1_0[26], ifd_segmap_acm_1_4[30], smurf_acm_1_0[31], b2i_ds_1_1[35], + // lbff_crop_espa_1_4[36], tnr_scaler_lb_1_1[38], ifd_segmap_tnr_bc_1_4[40], + // smurf_tnr_bc_1_0[41], odr_tnr_sp_bc_rs4n_1_4[43], ifd_segmap_tnr_blend_1_4[44], + // smurf_tnr_blend_1_0[45], odr_tnr_fp_yuvn_1_4[47], tnr_scaler_fp_1_1[48], + // image_upscaler_1_1[49], odr_tnr_scale_fp_yuv4n_1_4[50], ifd_segmap_cas_1_4[51], + // smurf_cas_1_0[52], odr_ofs_mp_1_4[54], b2i_ds_output_1_1[55], odr_ofs_dp_1_4[56] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77B1CE3FF81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[10], {ifd_tnr_fp_blend_yuvnm1_1_4}[11], + // {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], + // {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[22], {tnr7_ims_1_2}[23], + // {ifd_segmap_tnr_bc_1_4}[24], {smurf_tnr_bc_1_0}[25], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_segmap_tnr_blend_1_4}[27], + // {smurf_tnr_blend_1_0}[28], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30], + // {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFF9CE3FFF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], + // {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], + // {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], + // {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], + // {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1}[26], + // {tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {ifd_segmap_tnr_bc_1_4}[29], + // {smurf_tnr_bc_1_0}[30], {tnr7_bc_1_2}[31], {odr_tnr_sp_bc_rs4n_1_4}[32], + // {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1}[35], + // {odr_tnr_fp_yuvn_1_4}[36], {tnr_scaler_fp_1_1}[37], {image_upscaler_1_1}[38], + // {odr_tnr_scale_fp_yuv4n_1_4}[39], {ifd_segmap_cas_1_4}[40], {smurf_cas_1_0}[41], + // {cas_1_1}[42], {odr_ofs_mp_1_4}[43], {b2i_ds_output_1_1}[44], {odr_ofs_dp_1_4}[45] + // } + + uint8_t systemApisSizes[57] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::Init( + LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBBEB18C3FFF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], + // ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], + // ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], tnr_scaler_lb_1_1[39], + // gmv_statistics_1_1[41], odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], + // ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], + // ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], + // tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], + // ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], + // b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77F639C7FF81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], + // {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], + // {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], + // {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[23], {tnr7_ims_1_2}[24], {gmv_statistics_1_1}[25], + // {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFFF39C7FFF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], + // {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1}[27], + // {tnr_scaler_lb_1_1}[28], {tnr7_ims_1_2}[29], {gmv_statistics_1_1}[30], + // {odr_gmv_feature_1_4}[31], {odr_gmv_match_1_4}[32], {ifd_segmap_tnr_bc_1_4}[33], + // {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], + // {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], + // {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], + // {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], + // {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] + // } + + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 47, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[47] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x77C630FFFC71, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], + // smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], + // lbff_crop_espa_1_4[39], image_upscaler_1_1[40], ifd_segmap_cas_1_4[41], + // smurf_cas_1_0[42], odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x4F8E71FFE0C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FCE71FFFCF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_segmap_bnlm_1_4}[18], + // {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], + // {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], + // {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], + // {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], + // {ifd_segmap_cas_1_4}[30], {smurf_cas_1_0}[31], {cas_1_1}[32], + // {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35] } + + uint8_t systemApisSizes[47] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x77F8C61FFFC71, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_gmv_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], + // ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], + // smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], image_upscaler_1_1[41], + // gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], + // ifd_segmap_cas_1_4[45], smurf_cas_1_0[46], odr_ofs_mp_1_4[48], + // b2i_ds_output_1_1[49], odr_ofs_dp_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x4FF1CE3FFE0C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], + // {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FF9CE3FFFCF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], + // {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], + // {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], + // {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], + // {image_upscaler_1_1}[30], {gmv_statistics_1_1}[31], {odr_gmv_feature_1_4}[32], + // {odr_gmv_match_1_4}[33], {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], + // {cas_1_1}[36], {odr_ofs_mp_1_4}[37], {b2i_ds_output_1_1}[38], {odr_ofs_dp_1_4}[39] + // } + + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 63, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[63] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x77EED63187FFFC71, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], + // ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], + // ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], + // smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], + // ifd_segmap_tnr_bc_1_4[46], smurf_tnr_bc_1_0[47], odr_tnr_sp_bc_rs4n_1_4[49], + // ifd_segmap_tnr_blend_1_4[50], smurf_tnr_blend_1_0[51], odr_tnr_fp_yuvn_1_4[53], + // tnr_scaler_fp_1_1[54], image_upscaler_1_1[55], odr_tnr_scale_fp_yuv4n_1_4[56], + // ifd_segmap_cas_1_4[57], smurf_cas_1_0[58], odr_ofs_mp_1_4[60], + // b2i_ds_output_1_1[61], odr_ofs_dp_1_4[62] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x4F1DEC738FFFE0C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FFFFE738FFFFCF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], + // {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], + // {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], + // {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], + // {ifd_segmap_tnr_bc_1_4}[35], {smurf_tnr_bc_1_0}[36], {tnr7_bc_1_2}[37], + // {odr_tnr_sp_bc_rs4n_1_4}[38], {ifd_segmap_tnr_blend_1_4}[39], + // {smurf_tnr_blend_1_0}[40], {tnr7_blend_1_1}[41], {odr_tnr_fp_yuvn_1_4}[42], + // {tnr_scaler_fp_1_1}[43], {image_upscaler_1_1}[44], + // {odr_tnr_scale_fp_yuv4n_1_4}[45], {ifd_segmap_cas_1_4}[46], {smurf_cas_1_0}[47], + // {cas_1_1}[48], {odr_ofs_mp_1_4}[49], {b2i_ds_output_1_1}[50], {odr_ofs_dp_1_4}[51] + // } + + uint8_t systemApisSizes[63] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 67, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[67] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7EEFAC630FFFFC71, + 0x7}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_gmv_1_4[22], ifd_tnr_sp_bc_yuv4nm1_1_4[23], ifd_tnr_sp_bc_rs4nm1_1_4[24], + // ifd_tnr_fp_blend_yuvnm1_1_4[25], ifd_segmap_bnlm_1_4[26], smurf_bnlm_1_0[27], + // ifd_segmap_xnr_1_4[32], smurf_xnr_1_0[33], ifd_segmap_acm_1_4[37], + // smurf_acm_1_0[38], b2i_ds_1_1[42], lbff_crop_espa_1_4[43], tnr_scaler_lb_1_1[45], + // gmv_statistics_1_1[47], odr_gmv_feature_1_4[48], odr_gmv_match_1_4[49], + // ifd_segmap_tnr_bc_1_4[50], smurf_tnr_bc_1_0[51], odr_tnr_sp_bc_rs4n_1_4[53], + // ifd_segmap_tnr_blend_1_4[54], smurf_tnr_blend_1_0[55], odr_tnr_fp_yuvn_1_4[57], + // tnr_scaler_fp_1_1[58], image_upscaler_1_1[59], odr_tnr_scale_fp_yuv4n_1_4[60], + // ifd_segmap_cas_1_4[61], smurf_cas_1_0[62], odr_ofs_mp_1_4[64], + // b2i_ds_output_1_1[65], odr_ofs_dp_1_4[66] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xF1DFD8E71FFFE0C2, + 0x4}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], + // {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], + // {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], + // {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], + // {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], + // {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], + // {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], + // {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFCE71FFFFCF3, + 0x7}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {ifd_segmap_bnlm_1_4}[22], + // {smurf_bnlm_1_0}[23], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[24], + // {ifd_segmap_xnr_1_4}[25], {smurf_xnr_1_0}[26], {xnr_5_4, vcr_3_1, glim_2_0}[27], + // {ifd_segmap_acm_1_4}[28], {smurf_acm_1_0}[29], {acm_1_2, gammatm_v4, csc_1_1}[30], + // {b2i_ds_1_1}[31], {lbff_crop_espa_1_4}[32], {tnr7_spatial_1_1}[33], + // {tnr_scaler_lb_1_1}[34], {tnr7_ims_1_2}[35], {gmv_statistics_1_1}[36], + // {odr_gmv_feature_1_4}[37], {odr_gmv_match_1_4}[38], {ifd_segmap_tnr_bc_1_4}[39], + // {smurf_tnr_bc_1_0}[40], {tnr7_bc_1_2}[41], {odr_tnr_sp_bc_rs4n_1_4}[42], + // {ifd_segmap_tnr_blend_1_4}[43], {smurf_tnr_blend_1_0}[44], {tnr7_blend_1_1}[45], + // {odr_tnr_fp_yuvn_1_4}[46], {tnr_scaler_fp_1_1}[47], {image_upscaler_1_1}[48], + // {odr_tnr_scale_fp_yuv4n_1_4}[49], {ifd_segmap_cas_1_4}[50], {smurf_cas_1_0}[51], + // {cas_1_1}[52], {odr_ofs_mp_1_4}[53], {b2i_ds_output_1_1}[54], {odr_ofs_dp_1_4}[55] + // } + + uint8_t systemApisSizes[67] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[28].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +/* + * Inner Nodes Setters + */ +void IsysOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 34; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C1FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwGdcOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007C380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007C380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF83C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007C380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007C380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF83C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwNntmOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void SwScalerOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysPdaf2OuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003F9F + bitmaps.teb[0] = 0x20003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003F9F + bitmaps.teb[0] = 0x10003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003F9F + bitmaps.teb[0] = 0x30003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323F9F + bitmaps.teb[0] = 0x20323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323F9F + bitmaps.teb[0] = 0x10323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C01FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323F9F + bitmaps.teb[0] = 0x30323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03F9F + bitmaps.teb[0] = 0x2FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007FC380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03F9F + bitmaps.teb[0] = 0x1FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007FC380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF803C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03F9F + bitmaps.teb[0] = 0x3FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23F9F + bitmaps.teb[0] = 0x2FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007FC380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23F9F + bitmaps.teb[0] = 0x1FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007FC380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF803C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23F9F + bitmaps.teb[0] = 0x3FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003E9F + bitmaps.teb[0] = 0x20003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003E9F + bitmaps.teb[0] = 0x10003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003E9F + bitmaps.teb[0] = 0x30003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323E9F + bitmaps.teb[0] = 0x20323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323E9F + bitmaps.teb[0] = 0x10323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323E9F + bitmaps.teb[0] = 0x30323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03E9F + bitmaps.teb[0] = 0x2FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03E9F + bitmaps.teb[0] = 0x1FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03E9F + bitmaps.teb[0] = 0x3FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23E9F + bitmaps.teb[0] = 0x2FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23E9F + bitmaps.teb[0] = 0x1FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23E9F + bitmaps.teb[0] = 0x3FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000BF + bitmaps.teb[0] = 0x300000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EBF + bitmaps.teb[0] = 0x20041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000BF + bitmaps.teb[0] = 0x200000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EBF + bitmaps.teb[0] = 0x10041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000BF + bitmaps.teb[0] = 0x100000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EBF + bitmaps.teb[0] = 0x30041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200BF + bitmaps.teb[0] = 0x303200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EBF + bitmaps.teb[0] = 0x20361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200BF + bitmaps.teb[0] = 0x203200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EBF + bitmaps.teb[0] = 0x10361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200BF + bitmaps.teb[0] = 0x103200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1EFEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EBF + bitmaps.teb[0] = 0x30361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000BF + bitmaps.teb[0] = 0x3FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EBF + bitmaps.teb[0] = 0x2FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000BF + bitmaps.teb[0] = 0x2FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EBF + bitmaps.teb[0] = 0x1FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000BF + bitmaps.teb[0] = 0x1FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00210003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFDEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EBF + bitmaps.teb[0] = 0x3FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200BF + bitmaps.teb[0] = 0x3FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EBF + bitmaps.teb[0] = 0x2FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200BF + bitmaps.teb[0] = 0x2FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EBF + bitmaps.teb[0] = 0x1FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200BF + bitmaps.teb[0] = 0x1FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000210003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFDEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EBF + bitmaps.teb[0] = 0x3FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDolSmoothOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 8; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // RBM - 0x0000000000000000000000025001A011 + bitmaps.rbm[0] = 0x5001A011; + bitmaps.rbm[1] = 0x2; + // DEB - 0x0000000000000000000000018C000131 + bitmaps.deb[0] = 0x8C000131; + bitmaps.deb[1] = 0x1; + // TEB - 0x0000000000010017 + bitmaps.teb[0] = 0x10017; + // REB - 0x00000000000000000000000000160787 + bitmaps.reb[0] = 0x160787; + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000FF + bitmaps.teb[0] = 0x300000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EFF + bitmaps.teb[0] = 0x20041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000FF + bitmaps.teb[0] = 0x200000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EFF + bitmaps.teb[0] = 0x10041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000FF + bitmaps.teb[0] = 0x100000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EFF + bitmaps.teb[0] = 0x30041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200FF + bitmaps.teb[0] = 0x303200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EFF + bitmaps.teb[0] = 0x20361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200FF + bitmaps.teb[0] = 0x203200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EFF + bitmaps.teb[0] = 0x10361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200FF + bitmaps.teb[0] = 0x103200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3DFDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EFF + bitmaps.teb[0] = 0x30361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000FF + bitmaps.teb[0] = 0x3FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EFF + bitmaps.teb[0] = 0x2FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000FF + bitmaps.teb[0] = 0x2FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EFF + bitmaps.teb[0] = 0x1FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000FF + bitmaps.teb[0] = 0x1FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800420007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFBDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EFF + bitmaps.teb[0] = 0x3FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200FF + bitmaps.teb[0] = 0x3FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EFF + bitmaps.teb[0] = 0x2FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200FF + bitmaps.teb[0] = 0x2FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EFF + bitmaps.teb[0] = 0x1FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200FF + bitmaps.teb[0] = 0x1FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000420007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFBDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EFF + bitmaps.teb[0] = 0x3FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 36; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000409F + bitmaps.teb[0] = 0x3000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041E9F + bitmaps.teb[0] = 0x30041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020045E9F + bitmaps.teb[0] = 0x20045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000409F + bitmaps.teb[0] = 0x2000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041E9F + bitmaps.teb[0] = 0x20041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010045E9F + bitmaps.teb[0] = 0x10045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000409F + bitmaps.teb[0] = 0x1000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041E9F + bitmaps.teb[0] = 0x10041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC68; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030045E9F + bitmaps.teb[0] = 0x30045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 32; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF80E0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 24 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF90E0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE0E0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F1FFE0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 40; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032409F + bitmaps.teb[0] = 0x3032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361E9F + bitmaps.teb[0] = 0x30361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020365E9F + bitmaps.teb[0] = 0x20365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032409F + bitmaps.teb[0] = 0x2032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361E9F + bitmaps.teb[0] = 0x20361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010365E9F + bitmaps.teb[0] = 0x10365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032409F + bitmaps.teb[0] = 0x1032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361E9F + bitmaps.teb[0] = 0x10361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF1FCFFF000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF1FCFFF040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030365E9F + bitmaps.teb[0] = 0x30365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0409F + bitmaps.teb[0] = 0x3FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41E9F + bitmaps.teb[0] = 0x3FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC45E9F + bitmaps.teb[0] = 0x2FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0409F + bitmaps.teb[0] = 0x2FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C3000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41E9F + bitmaps.teb[0] = 0x2FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C30003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC45E9F + bitmaps.teb[0] = 0x1FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0409F + bitmaps.teb[0] = 0x1FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C3000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41E9F + bitmaps.teb[0] = 0x1FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C30003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE3CFFF000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE3CFFF040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC45E9F + bitmaps.teb[0] = 0x3FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F0E0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001F0E0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001F0E0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE0F1FFE0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 52; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2409F + bitmaps.teb[0] = 0x3FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61E9F + bitmaps.teb[0] = 0x3FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF65E9F + bitmaps.teb[0] = 0x2FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2409F + bitmaps.teb[0] = 0x2FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C3000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61E9F + bitmaps.teb[0] = 0x2FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C30003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF65E9F + bitmaps.teb[0] = 0x1FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2409F + bitmaps.teb[0] = 0x1FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C3000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61E9F + bitmaps.teb[0] = 0x1FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C30003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFE3CFFF000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFE3CFFF040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF65E9F + bitmaps.teb[0] = 0x3FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 33; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030081E9F + bitmaps.teb[0] = 0x30081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020083F9F + bitmaps.teb[0] = 0x20083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020081E9F + bitmaps.teb[0] = 0x20081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010083F9F + bitmaps.teb[0] = 0x10083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010081E9F + bitmaps.teb[0] = 0x10081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x783F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030083F9F + bitmaps.teb[0] = 0x30083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A1E9F + bitmaps.teb[0] = 0x303A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A3F9F + bitmaps.teb[0] = 0x203A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A1E9F + bitmaps.teb[0] = 0x203A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A3F9F + bitmaps.teb[0] = 0x103A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A1E9F + bitmaps.teb[0] = 0x103A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7803F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F83F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A3F9F + bitmaps.teb[0] = 0x303A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC81E9F + bitmaps.teb[0] = 0x3FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC83F9F + bitmaps.teb[0] = 0x2FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC81E9F + bitmaps.teb[0] = 0x2FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC83F9F + bitmaps.teb[0] = 0x1FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC81E9F + bitmaps.teb[0] = 0x1FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFF0078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC83F9F + bitmaps.teb[0] = 0x3FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA1E9F + bitmaps.teb[0] = 0x3FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA3F9F + bitmaps.teb[0] = 0x2FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA1E9F + bitmaps.teb[0] = 0x2FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA3F9F + bitmaps.teb[0] = 0x1FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA1E9F + bitmaps.teb[0] = 0x1FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF0078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFF078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA3F9F + bitmaps.teb[0] = 0x3FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void SwSegnetOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 58; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysPdaf2WithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003F9F + bitmaps.teb[0] = 0xE0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003F9F + bitmaps.teb[0] = 0xD0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FFE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE00180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003F9F + bitmaps.teb[0] = 0xF0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323F9F + bitmaps.teb[0] = 0xE0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323F9F + bitmaps.teb[0] = 0xD0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FFE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE00180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323F9F + bitmaps.teb[0] = 0xF0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03F9F + bitmaps.teb[0] = 0xEFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03F9F + bitmaps.teb[0] = 0xDFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FFE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE00180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03F9F + bitmaps.teb[0] = 0xFFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23F9F + bitmaps.teb[0] = 0xEFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23F9F + bitmaps.teb[0] = 0xDFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23F9F + bitmaps.teb[0] = 0xFFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003E9F + bitmaps.teb[0] = 0xE0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003E9F + bitmaps.teb[0] = 0xD0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000FF0D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF00C00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003E9F + bitmaps.teb[0] = 0xF0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323E9F + bitmaps.teb[0] = 0xE0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323E9F + bitmaps.teb[0] = 0xD0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000FF0D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF00C00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323E9F + bitmaps.teb[0] = 0xF0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03E9F + bitmaps.teb[0] = 0xEFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03E9F + bitmaps.teb[0] = 0xDFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000FF0D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF00C00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03E9F + bitmaps.teb[0] = 0xFFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23E9F + bitmaps.teb[0] = 0xEFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23E9F + bitmaps.teb[0] = 0xDFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000FF0D0; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF00C00; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23E9F + bitmaps.teb[0] = 0xFFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000BF + bitmaps.teb[0] = 0xF00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EBF + bitmaps.teb[0] = 0xE0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000BF + bitmaps.teb[0] = 0xE00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EBF + bitmaps.teb[0] = 0xD0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000BF + bitmaps.teb[0] = 0xD00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000C3EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF30000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EBF + bitmaps.teb[0] = 0xF0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200BF + bitmaps.teb[0] = 0xF03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EBF + bitmaps.teb[0] = 0xE0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200BF + bitmaps.teb[0] = 0xE03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EBF + bitmaps.teb[0] = 0xD0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200BF + bitmaps.teb[0] = 0xD03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000C3EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF30000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EBF + bitmaps.teb[0] = 0xF0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000BF + bitmaps.teb[0] = 0xFFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EBF + bitmaps.teb[0] = 0xEFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000BF + bitmaps.teb[0] = 0xEFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EBF + bitmaps.teb[0] = 0xDFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000BF + bitmaps.teb[0] = 0xDFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000C3EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF30000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EBF + bitmaps.teb[0] = 0xFFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200BF + bitmaps.teb[0] = 0xFFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EBF + bitmaps.teb[0] = 0xEFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200BF + bitmaps.teb[0] = 0xEFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EBF + bitmaps.teb[0] = 0xDFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200BF + bitmaps.teb[0] = 0xDFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000C3EC0; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF30000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EBF + bitmaps.teb[0] = 0xFFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000FF + bitmaps.teb[0] = 0xF00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EFF + bitmaps.teb[0] = 0xE0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000FF + bitmaps.teb[0] = 0xE00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EFF + bitmaps.teb[0] = 0xD0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000FF + bitmaps.teb[0] = 0xD00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000187D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE60000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EFF + bitmaps.teb[0] = 0xF0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200FF + bitmaps.teb[0] = 0xF03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EFF + bitmaps.teb[0] = 0xE0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200FF + bitmaps.teb[0] = 0xE03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EFF + bitmaps.teb[0] = 0xD0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200FF + bitmaps.teb[0] = 0xD03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000187D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE60000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EFF + bitmaps.teb[0] = 0xF0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000FF + bitmaps.teb[0] = 0xFFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EFF + bitmaps.teb[0] = 0xEFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000FF + bitmaps.teb[0] = 0xEFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EFF + bitmaps.teb[0] = 0xDFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000FF + bitmaps.teb[0] = 0xDFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000187D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE60000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EFF + bitmaps.teb[0] = 0xFFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200FF + bitmaps.teb[0] = 0xFFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EFF + bitmaps.teb[0] = 0xEFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200FF + bitmaps.teb[0] = 0xEFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EFF + bitmaps.teb[0] = 0xDFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200FF + bitmaps.teb[0] = 0xDFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE60000; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EFF + bitmaps.teb[0] = 0xFFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000409F + bitmaps.teb[0] = 0xF000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041E9F + bitmaps.teb[0] = 0xF0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0045E9F + bitmaps.teb[0] = 0xE0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000409F + bitmaps.teb[0] = 0xE000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041E9F + bitmaps.teb[0] = 0xE0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0045E9F + bitmaps.teb[0] = 0xD0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000409F + bitmaps.teb[0] = 0xD000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041E9F + bitmaps.teb[0] = 0xD0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC68; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0045E9F + bitmaps.teb[0] = 0xF0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032409F + bitmaps.teb[0] = 0xF032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361E9F + bitmaps.teb[0] = 0xF0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0365E9F + bitmaps.teb[0] = 0xE0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032409F + bitmaps.teb[0] = 0xE032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361E9F + bitmaps.teb[0] = 0xE0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0365E9F + bitmaps.teb[0] = 0xD0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032409F + bitmaps.teb[0] = 0xD032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361E9F + bitmaps.teb[0] = 0xD0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF83000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF83040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0365E9F + bitmaps.teb[0] = 0xF0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 60; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0409F + bitmaps.teb[0] = 0xFFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41E9F + bitmaps.teb[0] = 0xFFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC45E9F + bitmaps.teb[0] = 0xEFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0409F + bitmaps.teb[0] = 0xEFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41E9F + bitmaps.teb[0] = 0xEFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC45E9F + bitmaps.teb[0] = 0xDFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0409F + bitmaps.teb[0] = 0xDFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41E9F + bitmaps.teb[0] = 0xDFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF83000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF83040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC45E9F + bitmaps.teb[0] = 0xFFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 64; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2409F + bitmaps.teb[0] = 0xFFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61E9F + bitmaps.teb[0] = 0xFFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF65E9F + bitmaps.teb[0] = 0xEFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2409F + bitmaps.teb[0] = 0xEFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61E9F + bitmaps.teb[0] = 0xEFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF65E9F + bitmaps.teb[0] = 0xDFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2409F + bitmaps.teb[0] = 0xDFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61E9F + bitmaps.teb[0] = 0xDFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF83000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF83040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF65E9F + bitmaps.teb[0] = 0xFFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[19].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[29].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 38 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 38 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 ifd_segmap_acm_1_4- inner node disablement + // 28 smurf_acm_1_0- inner node disablement + // 29 acm_1_2- inner node disablement + // 30 gammatm_v4- inner node disablement + // 31 csc_1_1- inner node disablement + // 32 b2i_ds_1_1- inner node disablement + // 33 lbff_crop_espa_1_4- inner node disablement + // 34 image_upscaler_1_1- inner node disablement + // 35 ifd_segmap_cas_1_4- inner node disablement + // 36 smurf_cas_1_0- inner node disablement + // 37 cas_1_1- inner node disablement + // 38 odr_ofs_mp_1_4- inner node disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 ifd_segmap_acm_1_4- inner node disablement + // 28 smurf_acm_1_0- inner node disablement + // 29 acm_1_2- inner node disablement + // 30 gammatm_v4- inner node disablement + // 31 csc_1_1- inner node disablement + // 32 b2i_ds_1_1- inner node disablement + // 33 lbff_crop_espa_1_4- inner node disablement + // 34 image_upscaler_1_1- inner node disablement + // 35 ifd_segmap_cas_1_4- inner node disablement + // 36 smurf_cas_1_0- inner node disablement + // 37 cas_1_1- inner node disablement + // 38 odr_ofs_mp_1_4- inner node disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[20].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[30].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 57; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[22].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[32].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 54 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 54 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 tnr7_spatial_1_1- inner node disablement + // 38 tnr_scaler_lb_1_1- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 ifd_segmap_tnr_bc_1_4- inner node disablement + // 41 smurf_tnr_bc_1_0- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_segmap_tnr_blend_1_4- inner node disablement + // 45 smurf_tnr_blend_1_0- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 51 ifd_segmap_cas_1_4- inner node disablement + // 52 smurf_cas_1_0- inner node disablement + // 53 cas_1_1- inner node disablement + // 54 odr_ofs_mp_1_4- inner node disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 tnr7_spatial_1_1- inner node disablement + // 38 tnr_scaler_lb_1_1- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 ifd_segmap_tnr_bc_1_4- inner node disablement + // 41 smurf_tnr_bc_1_0- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_segmap_tnr_blend_1_4- inner node disablement + // 45 smurf_tnr_blend_1_0- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 51 ifd_segmap_cas_1_4- inner node disablement + // 52 smurf_cas_1_0- inner node disablement + // 53 cas_1_1- inner node disablement + // 54 odr_ofs_mp_1_4- inner node disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[23].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[33].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 47; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0081E9F + bitmaps.teb[0] = 0xF0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0083F9F + bitmaps.teb[0] = 0xE0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0081E9F + bitmaps.teb[0] = 0xE0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0083F9F + bitmaps.teb[0] = 0xD0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0081E9F + bitmaps.teb[0] = 0xD0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFC00300; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC0300; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0083F9F + bitmaps.teb[0] = 0xF0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A1E9F + bitmaps.teb[0] = 0xF03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A3F9F + bitmaps.teb[0] = 0xE03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A1E9F + bitmaps.teb[0] = 0xE03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A3F9F + bitmaps.teb[0] = 0xD03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A1E9F + bitmaps.teb[0] = 0xD03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC00300; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFC0300; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A3F9F + bitmaps.teb[0] = 0xF03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 63; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC81E9F + bitmaps.teb[0] = 0xFFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC83F9F + bitmaps.teb[0] = 0xEFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC81E9F + bitmaps.teb[0] = 0xEFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC83F9F + bitmaps.teb[0] = 0xDFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC81E9F + bitmaps.teb[0] = 0xDFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFC00300; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFC0300; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC83F9F + bitmaps.teb[0] = 0xFFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 67; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA1E9F + bitmaps.teb[0] = 0xFFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA3F9F + bitmaps.teb[0] = 0xEFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA1E9F + bitmaps.teb[0] = 0xEFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA3F9F + bitmaps.teb[0] = 0xDFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA1E9F + bitmaps.teb[0] = 0xDFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC00300; + disabledRunKernelsBitmap[1] = 0x7; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFC0300; + disabledRunKernelsBitmap[1] = 0x7; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA3F9F + bitmaps.teb[0] = 0xFFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +/* + * Graph 100000 + */ +StaticGraph100000::StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100000, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100000::~StaticGraph100000() {} + +StaticGraphStatus imageSubGraphTopology100000::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[7]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100001 + */ +StaticGraph100001::StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100001, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100001::~StaticGraph100001() {} + +StaticGraphStatus imageSubGraphTopology100001::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100002 + */ +StaticGraph100002::StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100002, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100002::~StaticGraph100002() {} + +StaticGraphStatus imageSubGraphTopology100002::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100003 + */ +StaticGraph100003::StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100003, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100003::~StaticGraph100003() {} + +StaticGraphStatus imageSubGraphTopology100003::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100079 + */ +StaticGraph100079::StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100079, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100079::~StaticGraph100079() {} + +StaticGraphStatus imageSubGraphTopology100079::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100080 + */ +StaticGraph100080::StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100080, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100080::~StaticGraph100080() {} + +StaticGraphStatus imageSubGraphTopology100080::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100081 + */ +StaticGraph100081::StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100081, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100081::~StaticGraph100081() {} + +StaticGraphStatus imageSubGraphTopology100081::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100004 + */ +StaticGraph100004::StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100004, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100004::~StaticGraph100004() {} + +StaticGraphStatus imageSubGraphTopology100004::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !( + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !( + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100005 + */ +StaticGraph100005::StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100005, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100005::~StaticGraph100005() {} + +StaticGraphStatus imageSubGraphTopology100005::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100006 + */ +StaticGraph100006::StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100006, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100006::~StaticGraph100006() {} + +StaticGraphStatus imageSubGraphTopology100006::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100007 + */ +StaticGraph100007::StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100007, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100007::~StaticGraph100007() {} + +StaticGraphStatus imageSubGraphTopology100007::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[15]->isActive = !( + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !( + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100008 + */ +StaticGraph100008::StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100008, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 10; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100008::~StaticGraph100008() {} + +StaticGraphStatus imageSubGraphTopology100008::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !( + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !( + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100009 + */ +StaticGraph100009::StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100009, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100009::~StaticGraph100009() {} + +StaticGraphStatus imageSubGraphTopology100009::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100010 + */ +StaticGraph100010::StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100010, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100010::~StaticGraph100010() {} + +StaticGraphStatus imageSubGraphTopology100010::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100011 + */ +StaticGraph100011::StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100011, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100011::~StaticGraph100011() {} + +StaticGraphStatus imageSubGraphTopology100011::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[13]->isActive = !( + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !( + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100045 + */ +StaticGraph100045::StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100045, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100045::~StaticGraph100045() {} + +StaticGraphStatus imageSubGraphTopology100045::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100012 + */ +StaticGraph100012::StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100012, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode = + &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100012::~StaticGraph100012() {} + +StaticGraphStatus imageSubGraphTopology100012::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !( + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !( + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !( + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100013 + */ +StaticGraph100013::StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100013, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode = + &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100013::~StaticGraph100013() {} + +StaticGraphStatus imageSubGraphTopology100013::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100014 + */ +StaticGraph100014::StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100014, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode = + &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100014::~StaticGraph100014() {} + +StaticGraphStatus imageSubGraphTopology100014::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100015 + */ +StaticGraph100015::StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100015, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode = + &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100015::~StaticGraph100015() {} + +StaticGraphStatus imageSubGraphTopology100015::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[8]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[15]->isActive = !( + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !( + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100016 + */ +StaticGraph100016::StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100016, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode = + &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100016::~StaticGraph100016() {} + +StaticGraphStatus imageSubGraphTopology100016::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !( + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !( + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !( + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100017 + */ +StaticGraph100017::StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100017, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode = + &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100017::~StaticGraph100017() {} + +StaticGraphStatus imageSubGraphTopology100017::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !( + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[11]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = + (lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100018 + */ +StaticGraph100018::StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100018, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode = + &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100018::~StaticGraph100018() {} + +StaticGraphStatus imageSubGraphTopology100018::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !( + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[11]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[15]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = + (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = + (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = + (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100019 + */ +StaticGraph100019::StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100019, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode = + &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100019::~StaticGraph100019() {} + +StaticGraphStatus imageSubGraphTopology100019::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[10]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[11]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[17]->isActive = !( + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !( + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100020 + */ +StaticGraph100020::StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100020, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100020::~StaticGraph100020() {} + +StaticGraphStatus imageSubGraphTopology100020::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100020::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100020::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100021 + */ +StaticGraph100021::StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100021, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100021::~StaticGraph100021() {} + +StaticGraphStatus imageSubGraphTopology100021::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100021::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100021::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100022 + */ +StaticGraph100022::StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100022, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100022::~StaticGraph100022() {} + +StaticGraphStatus imageSubGraphTopology100022::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100022::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100022::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100023 + */ +StaticGraph100023::StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100023, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + for (uint8_t i = 0; i < 28; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = + &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100023::~StaticGraph100023() {} + +StaticGraphStatus imageSubGraphTopology100023::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100023::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[20]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[24]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100023::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[27]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[21]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[27]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[24]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[25]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[26]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100024 + */ +StaticGraph100024::StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100024, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 8; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100024::~StaticGraph100024() {} + +StaticGraphStatus imageSubGraphTopology100024::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[6]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[7]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[7]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 8; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100040 + */ +StaticGraph100040::StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100040, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100040::~StaticGraph100040() {} + +StaticGraphStatus imageSubGraphTopology100040::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[9]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = + (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100041 + */ +StaticGraph100041::StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100041, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100041::~StaticGraph100041() {} + +StaticGraphStatus imageSubGraphTopology100041::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[8]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100042 + */ +StaticGraph100042::StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100042, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100042::~StaticGraph100042() {} + +StaticGraphStatus imageSubGraphTopology100042::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100027 + */ +StaticGraph100027::StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100027, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100027::~StaticGraph100027() {} + +StaticGraphStatus imageSubGraphTopology100027::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[7]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100028 + */ +StaticGraph100028::StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100028, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100028::~StaticGraph100028() {} + +StaticGraphStatus imageSubGraphTopology100028::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100029 + */ +StaticGraph100029::StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100029, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100029::~StaticGraph100029() {} + +StaticGraphStatus imageSubGraphTopology100029::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100030 + */ +StaticGraph100030::StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100030, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100030::~StaticGraph100030() {} + +StaticGraphStatus imageSubGraphTopology100030::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100031 + */ +StaticGraph100031::StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100031, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100031::~StaticGraph100031() {} + +StaticGraphStatus imageSubGraphTopology100031::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100032 + */ +StaticGraph100032::StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100032, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100032::~StaticGraph100032() {} + +StaticGraphStatus imageSubGraphTopology100032::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100033 + */ +StaticGraph100033::StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100033, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100033::~StaticGraph100033() {} + +StaticGraphStatus imageSubGraphTopology100033::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100034 + */ +StaticGraph100034::StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100034, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100034::~StaticGraph100034() {} + +StaticGraphStatus imageSubGraphTopology100034::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100100 + */ +StaticGraph100100::StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100100, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100100::~StaticGraph100100() {} + +StaticGraphStatus imageSubGraphTopology100100::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100100::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_acm_1_4) and 29 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_cas_1_4) and 37 (smurf_cas_1_0) + } + + lbffBayerNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100101 + */ +StaticGraph100101::StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100101, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100101::~StaticGraph100101() {} + +StaticGraphStatus imageSubGraphTopology100101::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[13]->isActive = + (lbffBayerWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100101::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000; // Run kernel ids 18 (ifd_segmap_bnlm_1_4) and 19 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_xnr_1_4) and 25 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_acm_1_4) and 30 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100102 + */ +StaticGraph100102::StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100102, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100102::~StaticGraph100102() {} + +StaticGraphStatus imageSubGraphTopology100102::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[16]->isActive = + (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[17]->isActive = + (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100102::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 + // (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100103 + */ +StaticGraph100103::StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100103, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode = + &_lbffBayerWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100103::~StaticGraph100103() {} + +StaticGraphStatus imageSubGraphTopology100103::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !( + lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !( + lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[17]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100103::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 + // (smurf_tnr_blend_1_0) + } + + lbffBayerWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100104 + */ +StaticGraph100104::StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100104, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100104::~StaticGraph100104() {} + +StaticGraphStatus imageSubGraphTopology100104::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !( + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100104::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100105 + */ +StaticGraph100105::StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100105, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100105::~StaticGraph100105() {} + +StaticGraphStatus imageSubGraphTopology100105::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[18]->isActive = !( + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[19]->isActive = !( + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[21]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100105::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100106 + */ +StaticGraph100106::StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100106, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100106::~StaticGraph100106() {} + +StaticGraphStatus imageSubGraphTopology100106::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[17]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[21]->isActive = !( + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !( + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[18]->isActive = + (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100106::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100107 + */ +StaticGraph100107::StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100107, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100107::~StaticGraph100107() {} + +StaticGraphStatus imageSubGraphTopology100107::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[17]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[23]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[18]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100107::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100108 + */ +StaticGraph100108::StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100108, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100108::~StaticGraph100108() {} + +StaticGraphStatus imageSubGraphTopology100108::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !( + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100108::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100109 + */ +StaticGraph100109::StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100109, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100109::~StaticGraph100109() {} + +StaticGraphStatus imageSubGraphTopology100109::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[16]->isActive = !( + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !( + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100109::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100110 + */ +StaticGraph100110::StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100110, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100110::~StaticGraph100110() {} + +StaticGraphStatus imageSubGraphTopology100110::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[19]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100110::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100111 + */ +StaticGraph100111::StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100111, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100111::~StaticGraph100111() {} + +StaticGraphStatus imageSubGraphTopology100111::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100111::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100112 + */ +StaticGraph100112::StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100112, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode = + &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100112::~StaticGraph100112() {} + +StaticGraphStatus imageSubGraphTopology100112::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[13]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !( + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[17]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100112::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100113 + */ +StaticGraph100113::StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100113, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode = + &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100113::~StaticGraph100113() {} + +StaticGraphStatus imageSubGraphTopology100113::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[13]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[19]->isActive = !( + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !( + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = + (lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100113::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100114 + */ +StaticGraph100114::StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100114, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode = + &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100114::~StaticGraph100114() {} + +StaticGraphStatus imageSubGraphTopology100114::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[22]->isActive = !( + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !( + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = + (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100114::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 + // (smurf_tnr_blend_1_0) + } + + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100115 + */ +StaticGraph100115::StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100115, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode = + &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100115::~StaticGraph100115() {} + +StaticGraphStatus imageSubGraphTopology100115::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[24]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[26]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[27]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100115::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 + // (smurf_tnr_blend_1_0) + } + + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100116 + */ +StaticGraph100116::StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100116, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode = + &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100116::~StaticGraph100116() {} + +StaticGraphStatus imageSubGraphTopology100116::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !( + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100116::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100117 + */ +StaticGraph100117::StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100117, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode = + &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100117::~StaticGraph100117() {} + +StaticGraphStatus imageSubGraphTopology100117::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[21]->isActive = !( + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !( + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = + (lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100117::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100118 + */ +StaticGraph100118::StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100118, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode = + &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100118::~StaticGraph100118() {} + +StaticGraphStatus imageSubGraphTopology100118::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[25]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[16]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[19]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[20]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[24]->isActive = !( + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !( + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[21]->isActive = + (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = + (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = + (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100118::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[13]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[14]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 + // (smurf_tnr_blend_1_0) + } + + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100119 + */ +StaticGraph100119::StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100119, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[30]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 31; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode = + &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100119::~StaticGraph100119() {} + +StaticGraphStatus imageSubGraphTopology100119::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + subGraphLinks[29]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[16]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[19]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[20]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[26]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[28]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[27]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[29]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[21]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[23]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[24]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[25]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100119::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[13]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[14]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 + // (smurf_tnr_blend_1_0) + } + + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100120 + */ +StaticGraph100120::StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100120, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100120::~StaticGraph100120() {} + +StaticGraphStatus imageSubGraphTopology100120::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100120::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[19]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[20]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[21]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[17]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[19]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[20]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[21]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[17]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100121 + */ +StaticGraph100121::StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100121, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + for (uint8_t i = 0; i < 28; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = + &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 4; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100121::~StaticGraph100121() {} + +StaticGraphStatus imageSubGraphTopology100121::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100121::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[21]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[22]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[23]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[27]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[24]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[25]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[26]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[27]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100122 + */ +StaticGraph100122::StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100122, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[30] = link; + + for (uint8_t i = 0; i < 31; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = + &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100122::~StaticGraph100122() {} + +StaticGraphStatus imageSubGraphTopology100122::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100122::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[30]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[24]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[25]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[26]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[30]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[22]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[27]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[28]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[29]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[30]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[24]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[25]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[26]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[30]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[22]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[27]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[28]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[29]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100123 + */ +StaticGraph100123::StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100123, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[21] = link; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[22] = link; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[30] = link; + + link = &_graphLinks[31]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[31] = link; + + link = &_graphLinks[32]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[32] = link; + + link = &_graphLinks[33]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[33] = link; + + link = &_graphLinks[34]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[31] = link; + _image_irSubGraph.links[34] = link; + + link = &_graphLinks[35]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[32] = link; + _image_irSubGraph.links[35] = link; + + for (uint8_t i = 0; i < 36; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = + &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = + &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 4; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100123::~StaticGraph100123() {} + +StaticGraphStatus imageSubGraphTopology100123::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100123::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = + irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[32]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[26]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[27]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[28]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[32]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[24]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 33; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[29]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[30]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[31]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[35]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[28]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[29]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[30]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[31]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[35]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[27]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 36; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[32]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[33]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[34]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100127 + */ +StaticGraph100127::StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100127, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100127::~StaticGraph100127() {} + +StaticGraphStatus imageSubGraphTopology100127::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100127::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000; // Run kernel ids 16 (ifd_segmap_bnlm_1_4) and 17 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_xnr_1_4) and 23 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_acm_1_4) and 28 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_cas_1_4) and 36 (smurf_cas_1_0) + } + + lbffIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100128 + */ +StaticGraph100128::StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100128, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100128::~StaticGraph100128() {} + +StaticGraphStatus imageSubGraphTopology100128::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[13]->isActive = + (lbffIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100128::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_acm_1_4) and 29 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100129 + */ +StaticGraph100129::StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100129, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100129::~StaticGraph100129() {} + +StaticGraphStatus imageSubGraphTopology100129::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[16]->isActive = + (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[17]->isActive = + (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100129::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_cas_1_4) and 52 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_tnr_bc_1_4) and 41 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_blend_1_4) and 45 + // (smurf_tnr_blend_1_0) + } + + lbffIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100130 + */ +StaticGraph100130::StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100130, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100130::~StaticGraph100130() {} + +StaticGraphStatus imageSubGraphTopology100130::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[17]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100130::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 + // (smurf_tnr_blend_1_0) + } + + lbffIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100131 + */ +StaticGraph100131::StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100131, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100131::~StaticGraph100131() {} + +StaticGraphStatus imageSubGraphTopology100131::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[16]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100131::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000; // Run kernel ids 41 (ifd_segmap_cas_1_4) and 42 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100132 + */ +StaticGraph100132::StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100132, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100132::~StaticGraph100132() {} + +StaticGraphStatus imageSubGraphTopology100132::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[17]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[15]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100132::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_cas_1_4) and 46 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100133 + */ +StaticGraph100133::StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100133, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100133::~StaticGraph100133() {} + +StaticGraphStatus imageSubGraphTopology100133::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[20]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[21]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[17]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100133::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100134 + */ +StaticGraph100134::StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100134, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100134::~StaticGraph100134() {} + +StaticGraphStatus imageSubGraphTopology100134::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[22]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[17]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100134::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_bnlm_1_4) and 27 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_xnr_1_4) and 33 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000; // Run kernel ids 37 (ifd_segmap_acm_1_4) and 38 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000000; // Run kernel ids 61 (ifd_segmap_cas_1_4) and 62 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_bc_1_4) and 51 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_tnr_blend_1_4) and 55 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels( + disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100026 + */ +StaticGraph100026::StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100026, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 2; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysOuterNode = &_isysOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysOuterNode->contextId = 0; +} +StaticGraph100026::~StaticGraph100026() {} +/* + * Graph 100035 + */ +StaticGraph100035::StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100035, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolOuterNode = &_isysDolOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolOuterNode->contextId = 0; +} +StaticGraph100035::~StaticGraph100035() {} +/* + * Graph 100036 + */ +StaticGraph100036::StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100036, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2OuterNode->contextId = 0; +} +StaticGraph100036::~StaticGraph100036() {} +/* + * Graph 100037 + */ +StaticGraph100037::StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100037, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100037::~StaticGraph100037() {} +/* + * Graph 100038 + */ +StaticGraph100038::StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100038, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolWithCvOuterNode->contextId = 0; +} +StaticGraph100038::~StaticGraph100038() {} +/* + * Graph 100039 + */ +StaticGraph100039::StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100039, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; +} +StaticGraph100039::~StaticGraph100039() {} diff --git a/modules/ipu_desc/ipu8/StaticGraphAutogen.h b/modules/ipu_desc/ipu8/StaticGraphAutogen.h new file mode 100644 index 0000000..3bb16bf --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphAutogen.h @@ -0,0 +1,5750 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +#include "StaticGraphBinaryAutogen.h" +#include "StaticGraphTypesAutogen.h" + +#define SUPPORT_KEY_RESOLUTIONS 0 + +enum InnerNodeOption { + None = 0, + noIr = (1 << 1), + no3A = (1 << 2), + noMp = (1 << 3), + noDp = (1 << 4), + noPdaf = (1 << 5), +}; +typedef int32_t InnerNodeOptionsFlags; + +struct SubGraphPublicInnerNodeConfiguration { + bool no3A = false; + bool noMp = false; + bool noDp = false; + bool noPdaf = false; +}; + +struct KernelFragments { + StaticGraphFragmentDesc fragmentDescriptors[4]; +}; + +class OuterNode { + public: + /** + * \brief resourceId - represents the physical ID of the node, e.g. cb_id for CB node. + */ + uint8_t resourceId; + + /** + * \brief contextId - represents the logical Id of the node according to the use-case. + * Same physical nodes in given graph topology will have a different + * contextId + */ + uint8_t contextId = 0; + NodeTypes type; + HwBitmaps bitmaps; + StaticGraphNodeKernels nodeKernels; + + uint8_t numberOfFragments; + OuterNode() {} + ~OuterNode(); + + void Init(uint8_t nodeResourceId, NodeTypes nodeType, uint32_t kernelCount, + uint32_t operationMode, uint32_t streamId, uint8_t nodeNumberOfFragments); + + uint8_t GetNumberOfFragments(); + + void SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]); + + protected: + void InitRunKernels(uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], + StaticGraphKernelRes* resolutionInfos, + uint64_t kernelsResolutionHistoryGroupBitmap[2], + uint64_t kernelFragmentDescriptorGroupBitmap[2], + StaticGraphKernelRes* resolutionHistories, + StaticGraphKernelBppConfiguration* bppInfos, uint8_t* systemApisSizes, + uint8_t* systemApiData, KernelFragments* fragmentDescriptors); +}; + +struct GraphLink { + bool isActive = true; + + GraphElementType src; + OuterNode* srcNode = nullptr; + GraphElementType dest; + OuterNode* destNode = nullptr; + + uint8_t srcTerminalId = 0; + uint8_t destTerminalId = 0; + + FormatType format; + LinkType type; + uint8_t frameDelay = 0; + + StaticGraphLinkConfiguration* linkConfiguration = nullptr; + StaticGraphLinkCompressionConfiguration* linkCompressionConfiguration = nullptr; +}; + +struct SubGraphInnerNodeConfiguration { + SubGraphPublicInnerNodeConfiguration* imageInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* irInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* rawInnerOptions = nullptr; +}; + +class GraphTopology { + public: + GraphLink** links = nullptr; + int32_t numOfLinks = 0; + + GraphTopology(GraphLink** links, int32_t numOfLinks, + VirtualSinkMapping* sinkMappingConfiguration); + virtual StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration); + + protected: + VirtualSinkMapping* _sinkMappingConfiguration = nullptr; + static InnerNodeOptionsFlags GetInnerOptions( + SubGraphPublicInnerNodeConfiguration* publicInnerOptions); +}; + +class IStaticGraphConfig { + public: + virtual ~IStaticGraphConfig() {} + IStaticGraphConfig(SensorMode* selectedSensorMode, VirtualSinkMapping* sinkMappingConfiguration, + int32_t graphId, int32_t selectedSettingsId); + StaticGraphStatus getGraphTopology(GraphTopology** topology); + StaticGraphStatus getSensorMode(SensorMode** sensorMode); + StaticGraphStatus getGraphId(int32_t* id); + StaticGraphStatus getSettingsId(int32_t* id); + StaticGraphStatus getVirtualSinkConnection(VirtualSink& virtualSink, HwSink* hwSink); + + protected: + SensorMode* _selectedSensorMode = nullptr; + GraphTopology* _selectedGraphTopology = nullptr; + VirtualSinkMapping* _sinkMappingConfiguration = &_selectedSinkMappingConfiguration; + + private: + int32_t _graphId; + int32_t _settingsId; + VirtualSinkMapping _selectedSinkMappingConfiguration; +}; + +#pragma pack(push, 4) + +struct IsysOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[20]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[17]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[34]; + uint8_t systemApiConfiguration[2144]; +}; + +struct LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2824]; +}; + +struct SwGdcOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3474]; +}; + +struct LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4154]; +}; + +struct SwNntmOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; + uint8_t systemApiConfiguration[5]; +}; + +struct SwScalerOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct IsysPdaf2OuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2616]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[28]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3296]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[3946]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4626]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2396]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3076]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3726]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4406]; +}; + +struct IsysDolOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2589]; +}; + +struct LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3269]; +}; + +struct LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3919]; +}; + +struct LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4599]; +}; + +struct LbffDolSmoothOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[3]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[8]; + uint8_t systemApiConfiguration[476]; +}; + +struct LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[16]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2809]; +}; + +struct LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[20]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3489]; +}; + +struct LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[22]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4139]; +}; + +struct LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4819]; +}; + +struct LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[36]; + uint8_t systemApiConfiguration[2584]; +}; + +struct LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[32]; + uint8_t systemApiConfiguration[2124]; +}; + +struct LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[40]; + uint8_t systemApiConfiguration[3264]; +}; + +struct LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[3914]; +}; + +struct LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3454]; +}; + +struct LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[52]; + uint8_t systemApiConfiguration[4594]; +}; + +struct LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[33]; + uint8_t systemApiConfiguration[2144]; +}; + +struct LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2824]; +}; + +struct LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3474]; +}; + +struct LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4154]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[25]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[22]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[39]; + uint8_t systemApiConfiguration[2836]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[29]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[26]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[43]; + uint8_t systemApiConfiguration[3516]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4166]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[55]; + uint8_t systemApiConfiguration[4846]; +}; + +struct IsysWithCvOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[4]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[3]; + StaticGraphKernelRes resolutionHistories[4]; + StaticGraphKernelBppConfiguration bppInfos[4]; + uint8_t systemApiConfiguration[54]; +}; + +struct SwSegnetOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + uint32_t streamId = 0; + uint8_t tuningMode = 0; +}; + +struct LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3024]; +}; + +struct LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3704]; +}; + +struct LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[47]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[37]; + StaticGraphKernelRes resolutionHistories[35]; + StaticGraphKernelBppConfiguration bppInfos[58]; + uint8_t systemApiConfiguration[4794]; +}; + +struct LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5474]; +}; + +struct IsysPdaf2WithCvOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3496]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4176]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5266]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[55]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[45]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[5946]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3276]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3956]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5046]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5726]; +}; + +struct IsysDolWithCvOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3469]; +}; + +struct LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4149]; +}; + +struct LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5239]; +}; + +struct LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5919]; +}; + +struct LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3689]; +}; + +struct LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[31]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4369]; +}; + +struct LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[38]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5459]; +}; + +struct LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[42]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[6139]; +}; + +struct LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3464]; +}; + +struct LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[4144]; +}; + +struct LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[60]; + uint8_t systemApiConfiguration[5234]; +}; + +struct LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[64]; + uint8_t systemApiConfiguration[5914]; +}; + +struct LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3024]; +}; + +struct LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3704]; +}; + +struct LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[46]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[36]; + StaticGraphKernelRes resolutionHistories[35]; + StaticGraphKernelBppConfiguration bppInfos[57]; + uint8_t systemApiConfiguration[4794]; +}; + +struct LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5474]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[47]; + uint8_t systemApiConfiguration[3716]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4396]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[52]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[42]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[63]; + uint8_t systemApiConfiguration[5486]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[56]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[46]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[67]; + uint8_t systemApiConfiguration[6166]; +}; + +struct GraphConfiguration100000 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100001 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100002 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100003 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100079 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100080 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100081 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100004 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100005 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100006 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100007 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100008 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[10]; +}; + +struct GraphConfiguration100009 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100010 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100011 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100045 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100012 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration + lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100013 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration + lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100014 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration + lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100015 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration + lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100016 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration + lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100017 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration + lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100018 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration + lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100019 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration + lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100020 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100021 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100022 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100023 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100024 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[8]; +}; + +struct GraphConfiguration100040 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100041 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100042 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100027 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100028 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100029 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100030 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100031 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100032 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100033 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100034 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100100 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100101 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100102 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100103 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100104 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100105 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100106 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100107 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100108 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100109 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100110 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100111 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100112 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration + lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100113 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration + lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100114 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration + lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100115 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration + lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100116 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration + lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100117 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration + lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100118 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration + lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100119 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration + lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[31]; +}; + +struct GraphConfiguration100120 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration + lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100121 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration + lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100122 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration + lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[31]; +}; + +struct GraphConfiguration100123 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration + lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[36]; +}; + +struct GraphConfiguration100127 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100128 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100129 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100130 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration + lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100131 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100132 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100133 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100134 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100026 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[2]; +}; + +struct GraphConfiguration100035 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100036 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100037 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100038 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; + +struct GraphConfiguration100039 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; +#pragma pack(pop) + +class IsysOuterNode : public OuterNode { + public: + IsysOuterNode() : OuterNode() {} + void Init(IsysOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwGdcOuterNode : public OuterNode { + public: + SwGdcOuterNode() : OuterNode() {} + void Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwNntmOuterNode : public OuterNode { + public: + SwNntmOuterNode() : OuterNode() {} + void Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwScalerOuterNode : public OuterNode { + public: + SwScalerOuterNode() : OuterNode() {} + void Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysPdaf2OuterNode : public OuterNode { + public: + IsysPdaf2OuterNode() : OuterNode() {} + void Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysDolOuterNode : public OuterNode { + public: + IsysDolOuterNode() : OuterNode() {} + void Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDolSmoothOuterNode : public OuterNode { + public: + LbffDolSmoothOuterNode() : OuterNode() {} + void Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrIrNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrIrNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffIrNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffIrWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffIrNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffIrWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysWithCvOuterNode : public OuterNode { + public: + IsysWithCvOuterNode() : OuterNode() {} + void Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwSegnetOuterNode : public OuterNode { + public: + SwSegnetOuterNode() : OuterNode() {} + void Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysPdaf2WithCvOuterNode : public OuterNode { + public: + IsysPdaf2WithCvOuterNode() : OuterNode() {} + void Init(IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysDolWithCvOuterNode : public OuterNode { + public: + IsysDolWithCvOuterNode() : OuterNode() {} + void Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffIrNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffIrWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffIrNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffIrWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* + selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; + +class imageSubGraphTopology100000 : public GraphTopology { + public: + imageSubGraphTopology100000(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; +}; + +class StaticGraph100000 : public IStaticGraphConfig { + public: + StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100000(); + static const uint32_t hashCode = 2914817427; // autogenerated + + private: + // Configuration + GraphConfiguration100000 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100000 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100001 : public GraphTopology { + public: + imageSubGraphTopology100001(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; +}; + +class StaticGraph100001 : public IStaticGraphConfig { + public: + StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100001(); + static const uint32_t hashCode = 2722821038; // autogenerated + + private: + // Configuration + GraphConfiguration100001 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100001 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100002 : public GraphTopology { + public: + imageSubGraphTopology100002(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; +}; + +class StaticGraph100002 : public IStaticGraphConfig { + public: + StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100002(); + static const uint32_t hashCode = 3480542691; // autogenerated + + private: + // Configuration + GraphConfiguration100002 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100002 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100003 : public GraphTopology { + public: + imageSubGraphTopology100003(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100003 : public IStaticGraphConfig { + public: + StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100003(); + static const uint32_t hashCode = 552482330; // autogenerated + + private: + // Configuration + GraphConfiguration100003 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100003 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100079 : public GraphTopology { + public: + imageSubGraphTopology100079(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100079 : public IStaticGraphConfig { + public: + StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100079(); + static const uint32_t hashCode = 4082826981; // autogenerated + + private: + // Configuration + GraphConfiguration100079 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100079 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100080 : public GraphTopology { + public: + imageSubGraphTopology100080(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100080 : public IStaticGraphConfig { + public: + StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100080(); + static const uint32_t hashCode = 4275052487; // autogenerated + + private: + // Configuration + GraphConfiguration100080 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100080 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100081 : public GraphTopology { + public: + imageSubGraphTopology100081(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100081 : public IStaticGraphConfig { + public: + StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100081(); + static const uint32_t hashCode = 6885079; // autogenerated + + private: + // Configuration + GraphConfiguration100081 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100081 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100004 : public GraphTopology { + public: + imageSubGraphTopology100004(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; +}; + +class StaticGraph100004 : public IStaticGraphConfig { + public: + StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100004(); + static const uint32_t hashCode = 678910205; // autogenerated + + private: + // Configuration + GraphConfiguration100004 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100004 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100005 : public GraphTopology { + public: + imageSubGraphTopology100005(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100005 : public IStaticGraphConfig { + public: + StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100005(); + static const uint32_t hashCode = 1129599756; // autogenerated + + private: + // Configuration + GraphConfiguration100005 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100005 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100006 : public GraphTopology { + public: + imageSubGraphTopology100006(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; +}; + +class StaticGraph100006 : public IStaticGraphConfig { + public: + StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100006(); + static const uint32_t hashCode = 1649128389; // autogenerated + + private: + // Configuration + GraphConfiguration100006 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100006 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100007 : public GraphTopology { + public: + imageSubGraphTopology100007(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; +}; + +class StaticGraph100007 : public IStaticGraphConfig { + public: + StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100007(); + static const uint32_t hashCode = 3800731584; // autogenerated + + private: + // Configuration + GraphConfiguration100007 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100007 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100008 : public GraphTopology { + public: + imageSubGraphTopology100008(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; +}; + +class StaticGraph100008 : public IStaticGraphConfig { + public: + StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100008(); + static const uint32_t hashCode = 4109353079; // autogenerated + + private: + // Configuration + GraphConfiguration100008 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100008 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[10]; +}; + +class imageSubGraphTopology100009 : public GraphTopology { + public: + imageSubGraphTopology100009(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; +}; + +class StaticGraph100009 : public IStaticGraphConfig { + public: + StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100009(); + static const uint32_t hashCode = 3119139422; // autogenerated + + private: + // Configuration + GraphConfiguration100009 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100009 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100010 : public GraphTopology { + public: + imageSubGraphTopology100010(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; +}; + +class StaticGraph100010 : public IStaticGraphConfig { + public: + StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100010(); + static const uint32_t hashCode = 3783435687; // autogenerated + + private: + // Configuration + GraphConfiguration100010 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100010 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100011 : public GraphTopology { + public: + imageSubGraphTopology100011(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; +}; + +class StaticGraph100011 : public IStaticGraphConfig { + public: + StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100011(); + static const uint32_t hashCode = 3398140634; // autogenerated + + private: + // Configuration + GraphConfiguration100011 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100011 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100045 : public GraphTopology { + public: + imageSubGraphTopology100045(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[18]; +}; + +class StaticGraph100045 : public IStaticGraphConfig { + public: + StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100045(); + static const uint32_t hashCode = 176907841; // autogenerated + + private: + // Configuration + GraphConfiguration100045 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100045 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100012 : public GraphTopology { + public: + imageSubGraphTopology100012(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode* lbffDol2InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100012 : public IStaticGraphConfig { + public: + StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100012(); + static const uint32_t hashCode = 144014565; // autogenerated + + private: + // Configuration + GraphConfiguration100012 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode _lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100012 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100013 : public GraphTopology { + public: + imageSubGraphTopology100013(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode* lbffDol2InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100013 : public IStaticGraphConfig { + public: + StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100013(); + static const uint32_t hashCode = 1202051034; // autogenerated + + private: + // Configuration + GraphConfiguration100013 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode _lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100013 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100014 : public GraphTopology { + public: + imageSubGraphTopology100014(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode* lbffDol2InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; +}; + +class StaticGraph100014 : public IStaticGraphConfig { + public: + StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100014(); + static const uint32_t hashCode = 3377348061; // autogenerated + + private: + // Configuration + GraphConfiguration100014 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode _lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100014 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100015 : public GraphTopology { + public: + imageSubGraphTopology100015(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode* lbffDol2InputsWithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; +}; + +class StaticGraph100015 : public IStaticGraphConfig { + public: + StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100015(); + static const uint32_t hashCode = 2846893190; // autogenerated + + private: + // Configuration + GraphConfiguration100015 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode _lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100015 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100016 : public GraphTopology { + public: + imageSubGraphTopology100016(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode* lbffDol3InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100016 : public IStaticGraphConfig { + public: + StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100016(); + static const uint32_t hashCode = 2137187788; // autogenerated + + private: + // Configuration + GraphConfiguration100016 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode _lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100016 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100017 : public GraphTopology { + public: + imageSubGraphTopology100017(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode* lbffDol3InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100017 : public IStaticGraphConfig { + public: + StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100017(); + static const uint32_t hashCode = 3238724207; // autogenerated + + private: + // Configuration + GraphConfiguration100017 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode _lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100017 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100018 : public GraphTopology { + public: + imageSubGraphTopology100018(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode* lbffDol3InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; +}; + +class StaticGraph100018 : public IStaticGraphConfig { + public: + StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100018(); + static const uint32_t hashCode = 3471629776; // autogenerated + + private: + // Configuration + GraphConfiguration100018 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode _lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100018 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100019 : public GraphTopology { + public: + imageSubGraphTopology100019(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode* lbffDol3InputsWithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; +}; + +class StaticGraph100019 : public IStaticGraphConfig { + public: + StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100019(); + static const uint32_t hashCode = 349008703; // autogenerated + + private: + // Configuration + GraphConfiguration100019 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode _lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100019 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100020 : public GraphTopology { + public: + imageSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; +}; + +class irSubGraphTopology100020 : public GraphTopology { + public: + irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class image_irSubGraphTopology100020 : public GraphTopology { + public: + image_irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100020 : public IStaticGraphConfig { + public: + StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100020(); + static const uint32_t hashCode = 3438564774; // autogenerated + + private: + // Configuration + GraphConfiguration100020 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrNoGmvNoTnrNoSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100020 _imageSubGraph; + irSubGraphTopology100020 _irSubGraph; + image_irSubGraphTopology100020 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100021 : public GraphTopology { + public: + imageSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; +}; + +class irSubGraphTopology100021 : public GraphTopology { + public: + irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class image_irSubGraphTopology100021 : public GraphTopology { + public: + image_irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; +}; + +class StaticGraph100021 : public IStaticGraphConfig { + public: + StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100021(); + static const uint32_t hashCode = 4276022635; // autogenerated + + private: + // Configuration + GraphConfiguration100021 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvNoTnrNoSapOuterNode _lbffRgbIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100021 _imageSubGraph; + irSubGraphTopology100021 _irSubGraph; + image_irSubGraphTopology100021 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100022 : public GraphTopology { + public: + imageSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; +}; + +class irSubGraphTopology100022 : public GraphTopology { + public: + irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; +}; + +class image_irSubGraphTopology100022 : public GraphTopology { + public: + image_irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; +}; + +class StaticGraph100022 : public IStaticGraphConfig { + public: + StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100022(); + static const uint32_t hashCode = 2177181214; // autogenerated + + private: + // Configuration + GraphConfiguration100022 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrNoGmvWithTnrNoSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100022 _imageSubGraph; + irSubGraphTopology100022 _irSubGraph; + image_irSubGraphTopology100022 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100023 : public GraphTopology { + public: + imageSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; +}; + +class irSubGraphTopology100023 : public GraphTopology { + public: + irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; +}; + +class image_irSubGraphTopology100023 : public GraphTopology { + public: + image_irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[28]; +}; + +class StaticGraph100023 : public IStaticGraphConfig { + public: + StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100023(); + static const uint32_t hashCode = 4112854315; // autogenerated + + private: + // Configuration + GraphConfiguration100023 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvWithTnrNoSapOuterNode _lbffRgbIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100023 _imageSubGraph; + irSubGraphTopology100023 _irSubGraph; + image_irSubGraphTopology100023 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100024 : public GraphTopology { + public: + imageSubGraphTopology100024(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 8, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[8]; +}; + +class StaticGraph100024 : public IStaticGraphConfig { + public: + StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100024(); + static const uint32_t hashCode = 844284306; // autogenerated + + private: + // Configuration + GraphConfiguration100024 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100024 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[8]; +}; + +class imageSubGraphTopology100040 : public GraphTopology { + public: + imageSubGraphTopology100040(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[13]; +}; + +class StaticGraph100040 : public IStaticGraphConfig { + public: + StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100040(); + static const uint32_t hashCode = 874730067; // autogenerated + + private: + // Configuration + GraphConfiguration100040 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100040 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100041 : public GraphTopology { + public: + imageSubGraphTopology100041(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; +}; + +class StaticGraph100041 : public IStaticGraphConfig { + public: + StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100041(); + static const uint32_t hashCode = 2147300611; // autogenerated + + private: + // Configuration + GraphConfiguration100041 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100041 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100042 : public GraphTopology { + public: + imageSubGraphTopology100042(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; +}; + +class StaticGraph100042 : public IStaticGraphConfig { + public: + StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100042(); + static const uint32_t hashCode = 3491144622; // autogenerated + + private: + // Configuration + GraphConfiguration100042 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100042 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100027 : public GraphTopology { + public: + imageSubGraphTopology100027(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvNoTnrNoSapOuterNode* lbffIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; +}; + +class StaticGraph100027 : public IStaticGraphConfig { + public: + StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100027(); + static const uint32_t hashCode = 189755735; // autogenerated + + private: + // Configuration + GraphConfiguration100027 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvNoTnrNoSapOuterNode _lbffIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100027 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100028 : public GraphTopology { + public: + imageSubGraphTopology100028(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvNoTnrNoSapOuterNode* lbffIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; +}; + +class StaticGraph100028 : public IStaticGraphConfig { + public: + StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100028(); + static const uint32_t hashCode = 616830362; // autogenerated + + private: + // Configuration + GraphConfiguration100028 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvNoTnrNoSapOuterNode _lbffIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100028 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100029 : public GraphTopology { + public: + imageSubGraphTopology100029(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvWithTnrNoSapOuterNode* lbffIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; +}; + +class StaticGraph100029 : public IStaticGraphConfig { + public: + StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100029(); + static const uint32_t hashCode = 3970859463; // autogenerated + + private: + // Configuration + GraphConfiguration100029 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvWithTnrNoSapOuterNode _lbffIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100029 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100030 : public GraphTopology { + public: + imageSubGraphTopology100030(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvWithTnrNoSapOuterNode* lbffIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100030 : public IStaticGraphConfig { + public: + StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100030(); + static const uint32_t hashCode = 3349357766; // autogenerated + + private: + // Configuration + GraphConfiguration100030 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvWithTnrNoSapOuterNode _lbffIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100030 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100031 : public GraphTopology { + public: + imageSubGraphTopology100031(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = + nullptr; + GraphLink* subGraphLinks[11]; +}; + +class StaticGraph100031 : public IStaticGraphConfig { + public: + StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100031(); + static const uint32_t hashCode = 2685553439; // autogenerated + + private: + // Configuration + GraphConfiguration100031 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100031 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100032 : public GraphTopology { + public: + imageSubGraphTopology100032(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; +}; + +class StaticGraph100032 : public IStaticGraphConfig { + public: + StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100032(); + static const uint32_t hashCode = 637249946; // autogenerated + + private: + // Configuration + GraphConfiguration100032 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100032 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100033 : public GraphTopology { + public: + imageSubGraphTopology100033(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; +}; + +class StaticGraph100033 : public IStaticGraphConfig { + public: + StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100033(); + static const uint32_t hashCode = 3946150383; // autogenerated + + private: + // Configuration + GraphConfiguration100033 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100033 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100034 : public GraphTopology { + public: + imageSubGraphTopology100034(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100034 : public IStaticGraphConfig { + public: + StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100034(); + static const uint32_t hashCode = 4100007686; // autogenerated + + private: + // Configuration + GraphConfiguration100034 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100034 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100100 : public GraphTopology { + public: + imageSubGraphTopology100100(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvNoTnrWithSapOuterNode* lbffBayerNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100100 : public IStaticGraphConfig { + public: + StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100100(); + static const uint32_t hashCode = 3814212434; // autogenerated + + private: + // Configuration + GraphConfiguration100100 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvNoTnrWithSapOuterNode _lbffBayerNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100100 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100101 : public GraphTopology { + public: + imageSubGraphTopology100101(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvNoTnrWithSapOuterNode* lbffBayerWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100101 : public IStaticGraphConfig { + public: + StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100101(); + static const uint32_t hashCode = 3190898911; // autogenerated + + private: + // Configuration + GraphConfiguration100101 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvNoTnrWithSapOuterNode _lbffBayerWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100101 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100102 : public GraphTopology { + public: + imageSubGraphTopology100102(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100102 : public IStaticGraphConfig { + public: + StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100102(); + static const uint32_t hashCode = 3712859908; // autogenerated + + private: + // Configuration + GraphConfiguration100102 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100102 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100103 : public GraphTopology { + public: + imageSubGraphTopology100103(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvWithTnrWithSapOuterNode* lbffBayerWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100103 : public IStaticGraphConfig { + public: + StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100103(); + static const uint32_t hashCode = 619377997; // autogenerated + + private: + // Configuration + GraphConfiguration100103 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvWithTnrWithSapOuterNode _lbffBayerWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100103 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100104 : public GraphTopology { + public: + imageSubGraphTopology100104(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100104 : public IStaticGraphConfig { + public: + StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100104(); + static const uint32_t hashCode = 2770355904; // autogenerated + + private: + // Configuration + GraphConfiguration100104 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100104 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100105 : public GraphTopology { + public: + imageSubGraphTopology100105(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100105 : public IStaticGraphConfig { + public: + StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100105(); + static const uint32_t hashCode = 1951006425; // autogenerated + + private: + // Configuration + GraphConfiguration100105 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100105 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100106 : public GraphTopology { + public: + imageSubGraphTopology100106(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100106 : public IStaticGraphConfig { + public: + StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100106(); + static const uint32_t hashCode = 290732550; // autogenerated + + private: + // Configuration + GraphConfiguration100106 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100106 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100107 : public GraphTopology { + public: + imageSubGraphTopology100107(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100107 : public IStaticGraphConfig { + public: + StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100107(); + static const uint32_t hashCode = 1727023371; // autogenerated + + private: + // Configuration + GraphConfiguration100107 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100107 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100108 : public GraphTopology { + public: + imageSubGraphTopology100108(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100108 : public IStaticGraphConfig { + public: + StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100108(); + static const uint32_t hashCode = 173440394; // autogenerated + + private: + // Configuration + GraphConfiguration100108 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100108 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100109 : public GraphTopology { + public: + imageSubGraphTopology100109(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100109 : public IStaticGraphConfig { + public: + StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100109(); + static const uint32_t hashCode = 1543340907; // autogenerated + + private: + // Configuration + GraphConfiguration100109 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100109 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100110 : public GraphTopology { + public: + imageSubGraphTopology100110(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100110 : public IStaticGraphConfig { + public: + StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100110(); + static const uint32_t hashCode = 3102705644; // autogenerated + + private: + // Configuration + GraphConfiguration100110 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100110 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100111 : public GraphTopology { + public: + imageSubGraphTopology100111(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100111 : public IStaticGraphConfig { + public: + StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100111(); + static const uint32_t hashCode = 66338681; // autogenerated + + private: + // Configuration + GraphConfiguration100111 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100111 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100112 : public GraphTopology { + public: + imageSubGraphTopology100112(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode* lbffDol2InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100112 : public IStaticGraphConfig { + public: + StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100112(); + static const uint32_t hashCode = 1108287162; // autogenerated + + private: + // Configuration + GraphConfiguration100112 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode _lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100112 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100113 : public GraphTopology { + public: + imageSubGraphTopology100113(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode* lbffDol2InputsWithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100113 : public IStaticGraphConfig { + public: + StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100113(); + static const uint32_t hashCode = 1560693719; // autogenerated + + private: + // Configuration + GraphConfiguration100113 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode _lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100113 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100114 : public GraphTopology { + public: + imageSubGraphTopology100114(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode* lbffDol2InputsNoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[24]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100114 : public IStaticGraphConfig { + public: + StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100114(); + static const uint32_t hashCode = 62382684; // autogenerated + + private: + // Configuration + GraphConfiguration100114 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode _lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100114 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100115 : public GraphTopology { + public: + imageSubGraphTopology100115(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode* lbffDol2InputsWithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100115 : public IStaticGraphConfig { + public: + StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100115(); + static const uint32_t hashCode = 2994847221; // autogenerated + + private: + // Configuration + GraphConfiguration100115 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode _lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100115 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100116 : public GraphTopology { + public: + imageSubGraphTopology100116(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode* lbffDol3InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100116 : public IStaticGraphConfig { + public: + StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100116(); + static const uint32_t hashCode = 141943583; // autogenerated + + private: + // Configuration + GraphConfiguration100116 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode _lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100116 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100117 : public GraphTopology { + public: + imageSubGraphTopology100117(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode* lbffDol3InputsWithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100117 : public IStaticGraphConfig { + public: + StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100117(); + static const uint32_t hashCode = 235579058; // autogenerated + + private: + // Configuration + GraphConfiguration100117 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode _lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100117 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100118 : public GraphTopology { + public: + imageSubGraphTopology100118(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode* lbffDol3InputsNoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100118 : public IStaticGraphConfig { + public: + StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100118(); + static const uint32_t hashCode = 3835533685; // autogenerated + + private: + // Configuration + GraphConfiguration100118 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode _lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100118 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100119 : public GraphTopology { + public: + imageSubGraphTopology100119(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode* lbffDol3InputsWithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100119 : public IStaticGraphConfig { + public: + StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100119(); + static const uint32_t hashCode = 2100145004; // autogenerated + + private: + // Configuration + GraphConfiguration100119 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode _lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100119 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[31]; +}; + +class imageSubGraphTopology100120 : public GraphTopology { + public: + imageSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100120 : public GraphTopology { + public: + irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100120 : public GraphTopology { + public: + image_irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100120 : public IStaticGraphConfig { + public: + StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100120(); + static const uint32_t hashCode = 971823595; // autogenerated + + private: + // Configuration + GraphConfiguration100120 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvNoTnrWithSapOuterNode _lbffRgbIrNoGmvNoTnrWithSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100120 _imageSubGraph; + irSubGraphTopology100120 _irSubGraph; + image_irSubGraphTopology100120 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100121 : public GraphTopology { + public: + imageSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100121 : public GraphTopology { + public: + irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100121 : public GraphTopology { + public: + image_irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100121 : public IStaticGraphConfig { + public: + StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100121(); + static const uint32_t hashCode = 760104734; // autogenerated + + private: + // Configuration + GraphConfiguration100121 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvNoTnrWithSapOuterNode _lbffRgbIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100121 _imageSubGraph; + irSubGraphTopology100121 _irSubGraph; + image_irSubGraphTopology100121 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100122 : public GraphTopology { + public: + imageSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100122 : public GraphTopology { + public: + irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100122 : public GraphTopology { + public: + image_irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100122 : public IStaticGraphConfig { + public: + StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100122(); + static const uint32_t hashCode = 2835173097; // autogenerated + + private: + // Configuration + GraphConfiguration100122 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvWithTnrWithSapOuterNode _lbffRgbIrNoGmvWithTnrWithSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100122 _imageSubGraph; + irSubGraphTopology100122 _irSubGraph; + image_irSubGraphTopology100122 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[31]; +}; + +class imageSubGraphTopology100123 : public GraphTopology { + public: + imageSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100123 : public GraphTopology { + public: + irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 33, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[33]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100123 : public GraphTopology { + public: + image_irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 36, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[36]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100123 : public IStaticGraphConfig { + public: + StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100123(); + static const uint32_t hashCode = 1906732972; // autogenerated + + private: + // Configuration + GraphConfiguration100123 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvWithTnrWithSapOuterNode _lbffRgbIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100123 _imageSubGraph; + irSubGraphTopology100123 _irSubGraph; + image_irSubGraphTopology100123 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[36]; +}; + +class imageSubGraphTopology100127 : public GraphTopology { + public: + imageSubGraphTopology100127(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvNoTnrWithSapOuterNode* lbffIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100127 : public IStaticGraphConfig { + public: + StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100127(); + static const uint32_t hashCode = 1889144206; // autogenerated + + private: + // Configuration + GraphConfiguration100127 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvNoTnrWithSapOuterNode _lbffIrNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100127 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100128 : public GraphTopology { + public: + imageSubGraphTopology100128(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvNoTnrWithSapOuterNode* lbffIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100128 : public IStaticGraphConfig { + public: + StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100128(); + static const uint32_t hashCode = 2596417523; // autogenerated + + private: + // Configuration + GraphConfiguration100128 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvNoTnrWithSapOuterNode _lbffIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100128 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100129 : public GraphTopology { + public: + imageSubGraphTopology100129(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvWithTnrWithSapOuterNode* lbffIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100129 : public IStaticGraphConfig { + public: + StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100129(); + static const uint32_t hashCode = 3199590544; // autogenerated + + private: + // Configuration + GraphConfiguration100129 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvWithTnrWithSapOuterNode _lbffIrNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100129 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100130 : public GraphTopology { + public: + imageSubGraphTopology100130(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvWithTnrWithSapOuterNode* lbffIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100130 : public IStaticGraphConfig { + public: + StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100130(); + static const uint32_t hashCode = 2452021393; // autogenerated + + private: + // Configuration + GraphConfiguration100130 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvWithTnrWithSapOuterNode _lbffIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100130 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100131 : public GraphTopology { + public: + imageSubGraphTopology100131(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100131 : public IStaticGraphConfig { + public: + StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100131(); + static const uint32_t hashCode = 150427038; // autogenerated + + private: + // Configuration + GraphConfiguration100131 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100131 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100132 : public GraphTopology { + public: + imageSubGraphTopology100132(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100132 : public IStaticGraphConfig { + public: + StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100132(); + static const uint32_t hashCode = 2229860427; // autogenerated + + private: + // Configuration + GraphConfiguration100132 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100132 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100133 : public GraphTopology { + public: + imageSubGraphTopology100133(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100133 : public IStaticGraphConfig { + public: + StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100133(); + static const uint32_t hashCode = 3332109776; // autogenerated + + private: + // Configuration + GraphConfiguration100133 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100133 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100134 : public GraphTopology { + public: + imageSubGraphTopology100134(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100134 : public IStaticGraphConfig { + public: + StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100134(); + static const uint32_t hashCode = 2469377657; // autogenerated + + private: + // Configuration + GraphConfiguration100134 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100134 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class rawSubGraphTopology100026 : public GraphTopology { + public: + rawSubGraphTopology100026(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 2, sinkMappingConfiguration) {} + + IsysOuterNode* isysOuterNode = nullptr; + GraphLink* subGraphLinks[2]; +}; + +class StaticGraph100026 : public IStaticGraphConfig { + public: + StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100026(); + static const uint32_t hashCode = 1006964276; // autogenerated + + private: + // Configuration + GraphConfiguration100026 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100026 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[2]; +}; + +class rawSubGraphTopology100035 : public GraphTopology { + public: + rawSubGraphTopology100035(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + + IsysDolOuterNode* isysDolOuterNode = nullptr; + GraphLink* subGraphLinks[4]; +}; + +class StaticGraph100035 : public IStaticGraphConfig { + public: + StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100035(); + static const uint32_t hashCode = 1685721370; // autogenerated + + private: + // Configuration + GraphConfiguration100035 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100035 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100036 : public GraphTopology { + public: + rawSubGraphTopology100036(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + GraphLink* subGraphLinks[4]; +}; + +class StaticGraph100036 : public IStaticGraphConfig { + public: + StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100036(); + static const uint32_t hashCode = 1685721370; // autogenerated + + private: + // Configuration + GraphConfiguration100036 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100036 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100037 : public GraphTopology { + public: + rawSubGraphTopology100037(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; +}; + +class StaticGraph100037 : public IStaticGraphConfig { + public: + StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100037(); + static const uint32_t hashCode = 3835365160; // autogenerated + + private: + // Configuration + GraphConfiguration100037 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100037 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100038 : public GraphTopology { + public: + rawSubGraphTopology100038(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; +}; + +class StaticGraph100038 : public IStaticGraphConfig { + public: + StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100038(); + static const uint32_t hashCode = 963983022; // autogenerated + + private: + // Configuration + GraphConfiguration100038 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100038 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; + +class rawSubGraphTopology100039 : public GraphTopology { + public: + rawSubGraphTopology100039(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; +}; + +class StaticGraph100039 : public IStaticGraphConfig { + public: + StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100039(); + static const uint32_t hashCode = 963983022; // autogenerated + + private: + // Configuration + GraphConfiguration100039 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100039 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; diff --git a/modules/ipu_desc/ipu8/StaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu8/StaticGraphBinaryAutogen.h new file mode 100644 index 0000000..a3554c9 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphBinaryAutogen.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +#pragma pack(push, 4) +struct SensorMode { + uint16_t horizontalCropOffset = 0; + uint16_t verticalCropOffset = 0; + uint16_t croppedImageWidth = 0; + uint16_t croppedImageHeight = 0; + uint16_t horizontalScalingNumerator = 0; + uint16_t horizontalScalingDenominator = 0; + uint16_t verticalScalingNumerator = 0; + uint16_t verticalScalingDenominator = 0; +}; + +struct StreamConfig { + uint32_t width = 0; + uint32_t height = 0; + uint32_t bpp = 0; +}; + +struct AutoCalibrationStreamConfig { + uint32_t depthOutputWidth = 0; + uint32_t depthOutputHeight = 0; + uint32_t sliceNumber = 0; +}; + +enum class GraphConfigurationKeyAttributes : uint32_t { + None = 0x00000000, + PdafType1 = 0x00000001, + PdafType2 = 0x00000002, + PdafType3 = 0x00000004, + Dol2Inputs = 0x00000008, + Dol3Inputs = 0x00000010, + DvsActive = 0x00000020, + PipelineLowLight = 0x00000040, + PipelineNormalLight = 0x00000080, + LowPowerActive = 0x00000100, +}; + +struct GraphConfigurationKey { + uint32_t fps = 0; + uint32_t attributes = 0; + StreamConfig preview; + StreamConfig video; + StreamConfig postProcessingVideo; + StreamConfig stills; + StreamConfig raw; + StreamConfig videoIr; + StreamConfig previewIr; +}; + +struct GraphConfigurationHeader { + GraphConfigurationKey settingsKey; + uint16_t settingId = 0; + int32_t graphId = 0; + uint8_t sensorModeIndex = 0; + int32_t resConfigDataOffset = 0; + uint32_t graphHashCode = 0; +}; + +struct BinaryHeader { + uint32_t isSapEnable = 0; + uint32_t binaryCommonHashCode = 0; + uint32_t numberOfResolutions = 0; + uint32_t numberOfSensorModes = 0; +}; + +#pragma pack(pop) diff --git a/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.cpp new file mode 100644 index 0000000..768f699 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.cpp @@ -0,0 +1,1295 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "StaticGraphReaderAutogen.h" + +#include + +StaticGraphStatus StaticGraphReader::Init(StaticReaderBinaryData& binaryGraphSettings) { + if (!binaryGraphSettings.data) { + STATIC_GRAPH_LOG("Binary settings is empty."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* currOffset = static_cast(binaryGraphSettings.data); + _binaryHeader = *reinterpret_cast(currOffset); + + if (_binaryHeader.binaryCommonHashCode != staticGraphCommonHashCode) { + STATIC_GRAPH_LOG( + "Binary hash code is not matching the static graph structure hash code. Binary should " + "be re-created."); + return StaticGraphStatus::SG_ERROR; + } + + // Skipping BinaryHeader + + currOffset += sizeof(BinaryHeader); + + uint32_t numOfAvailablePins = 0; + DataRangeHeader dataRangeHeader = *(DataRangeHeader*)currOffset; + + for (int j = 0; j < enNumOfOutPins; j++) + numOfAvailablePins += dataRangeHeader.NumberOfPinResolutions[j]; + + currOffset += sizeof(DataRangeHeader) + sizeof(DriverDesc) * numOfAvailablePins; + + uint32_t numOfGraphs = *(uint32_t*)currOffset; + currOffset += sizeof(numOfGraphs) + numOfGraphs * sizeof(GraphHashCode); + + _graphConfigurationHeaders = reinterpret_cast(currOffset); + currOffset += sizeof(GraphConfigurationHeader) * _binaryHeader.numberOfResolutions; + _sensorModes = reinterpret_cast(currOffset); + currOffset += sizeof(SensorMode) * _binaryHeader.numberOfSensorModes; + _configurationData = currOffset; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& settingsKey, + IStaticGraphConfig** graph) { + if (!_graphConfigurationHeaders || !_sensorModes || !_configurationData) { + STATIC_GRAPH_LOG("Static graph reader was not initialized properly."); + return StaticGraphStatus::SG_ERROR; + } + + if (!graph) { + STATIC_GRAPH_LOG("Cannot get graph configuration into null parameter"); + return StaticGraphStatus::SG_ERROR; + } + + GraphConfigurationHeader* selectedGraphConfigurationHeader = nullptr; + + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) { + if (memcmp(&_graphConfigurationHeaders[i].settingsKey, &settingsKey, + sizeof(GraphConfigurationKey)) == 0) { + selectedGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + STATIC_GRAPH_LOG("Static graph selected setting id - %d", + selectedGraphConfigurationHeader->settingId); + + break; + } + } + + if (!selectedGraphConfigurationHeader) { + STATIC_GRAPH_LOG("Resolution settings was not found for the given key."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* selectedConfigurationData = + _configurationData + selectedGraphConfigurationHeader->resConfigDataOffset; + + GraphConfigurationHeader* baseGraphConfigurationHeader = nullptr; + + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) { + if (_graphConfigurationHeaders[i].resConfigDataOffset == + selectedGraphConfigurationHeader->resConfigDataOffset) { + if (selectedGraphConfigurationHeader != &_graphConfigurationHeaders[i]) { + baseGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + } + break; + } + } + + VirtualSinkMapping* baseSinkMappingConfiguration = + reinterpret_cast(selectedConfigurationData); + + VirtualSinkMapping selectedSinkMappingConfiguration; + GetSinkMappingConfiguration(baseGraphConfigurationHeader, baseSinkMappingConfiguration, + selectedGraphConfigurationHeader, + &selectedSinkMappingConfiguration); + + // fetching the graph + switch (selectedGraphConfigurationHeader->graphId) { + case 100000: + if (StaticGraph100000::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100000( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100001: + if (StaticGraph100001::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100001( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100002: + if (StaticGraph100002::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100002( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100003: + if (StaticGraph100003::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100003( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100079: + if (StaticGraph100079::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100079( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100080: + if (StaticGraph100080::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100080( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100081: + if (StaticGraph100081::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100081( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100004: + if (StaticGraph100004::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100004( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100005: + if (StaticGraph100005::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100005( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100006: + if (StaticGraph100006::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100006( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100007: + if (StaticGraph100007::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100007( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100008: + if (StaticGraph100008::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100008( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100009: + if (StaticGraph100009::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100009( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100010: + if (StaticGraph100010::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100010( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100011: + if (StaticGraph100011::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100011( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100045: + if (StaticGraph100045::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100045( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100012: + if (StaticGraph100012::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100012( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100013: + if (StaticGraph100013::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100013( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100014: + if (StaticGraph100014::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100014( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100015: + if (StaticGraph100015::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100015( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100016: + if (StaticGraph100016::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100016( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100017: + if (StaticGraph100017::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100017( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100018: + if (StaticGraph100018::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100018( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100019: + if (StaticGraph100019::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100019( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100020: + if (StaticGraph100020::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100020( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100021: + if (StaticGraph100021::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100021( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100022: + if (StaticGraph100022::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100022( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100023: + if (StaticGraph100023::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100023( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100024: + if (StaticGraph100024::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100024( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100040: + if (StaticGraph100040::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100040( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100041: + if (StaticGraph100041::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100041( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100042: + if (StaticGraph100042::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100042( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100027: + if (StaticGraph100027::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100027( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100028: + if (StaticGraph100028::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100028( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100029: + if (StaticGraph100029::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100029( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100030: + if (StaticGraph100030::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100030( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100031: + if (StaticGraph100031::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100031( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100032: + if (StaticGraph100032::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100032( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100033: + if (StaticGraph100033::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100033( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100034: + if (StaticGraph100034::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100034( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100100: + if (StaticGraph100100::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100100( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100101: + if (StaticGraph100101::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100101( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100102: + if (StaticGraph100102::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100102( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100103: + if (StaticGraph100103::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100103( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100104: + if (StaticGraph100104::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100104( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100105: + if (StaticGraph100105::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100105( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100106: + if (StaticGraph100106::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100106( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100107: + if (StaticGraph100107::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100107( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100108: + if (StaticGraph100108::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100108( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100109: + if (StaticGraph100109::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100109( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100110: + if (StaticGraph100110::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100110( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100111: + if (StaticGraph100111::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100111( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100112: + if (StaticGraph100112::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100112( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100113: + if (StaticGraph100113::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100113( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100114: + if (StaticGraph100114::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100114( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100115: + if (StaticGraph100115::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100115( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100116: + if (StaticGraph100116::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100116( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100117: + if (StaticGraph100117::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100117( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100118: + if (StaticGraph100118::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100118( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100119: + if (StaticGraph100119::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100119( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100120: + if (StaticGraph100120::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100120( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100121: + if (StaticGraph100121::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100121( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100122: + if (StaticGraph100122::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100122( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100123: + if (StaticGraph100123::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100123( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100127: + if (StaticGraph100127::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100127( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100128: + if (StaticGraph100128::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100128( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100129: + if (StaticGraph100129::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100129( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100130: + if (StaticGraph100130::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100130( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100131: + if (StaticGraph100131::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100131( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100132: + if (StaticGraph100132::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100132( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100133: + if (StaticGraph100133::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100133( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100134: + if (StaticGraph100134::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100134( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100026: + if (StaticGraph100026::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100026( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100035: + if (StaticGraph100035::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100035( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100036: + if (StaticGraph100036::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100036( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100037: + if (StaticGraph100037::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100037( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100038: + if (StaticGraph100038::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100038( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100039: + if (StaticGraph100039::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100039( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + default: + STATIC_GRAPH_LOG("Graph %d was not found", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +void StaticGraphReader::GetSinkMappingConfiguration( + GraphConfigurationHeader* baseGraphConfigurationHeader, + VirtualSinkMapping* baseSinkMappingConfiguration, + GraphConfigurationHeader* selectedGraphConfigurationHeader, + VirtualSinkMapping* selectedSinkMappingConfiguration) { + if (baseGraphConfigurationHeader == nullptr) { + memcpy(selectedSinkMappingConfiguration, baseSinkMappingConfiguration, + sizeof(VirtualSinkMapping)); + } else { + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == + baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == + baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == + baseGraphConfigurationHeader->settingsKey.preview.height) { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->preview; + } else if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == + baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == + baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == + baseGraphConfigurationHeader->settingsKey.video.height) { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->video; + } else if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height) { + selectedSinkMappingConfiguration->preview = + baseSinkMappingConfiguration->postProcessingVideo; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for preview sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == + baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == + baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.video.height == + baseGraphConfigurationHeader->settingsKey.preview.height && + selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview) { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->preview; + } else if (selectedGraphConfigurationHeader->settingsKey.video.bpp == + baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == + baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.video.height == + baseGraphConfigurationHeader->settingsKey.video.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->video) { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->video; + } else if (selectedGraphConfigurationHeader->settingsKey.video.bpp == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.video.height == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->postProcessingVideo) { + selectedSinkMappingConfiguration->video = + baseSinkMappingConfiguration->postProcessingVideo; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for video sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == + baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == + baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == + baseGraphConfigurationHeader->settingsKey.preview.height && + selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview && + selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->preview) { + selectedSinkMappingConfiguration->postProcessingVideo = + baseSinkMappingConfiguration->preview; + } else if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == + baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == + baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == + baseGraphConfigurationHeader->settingsKey.video.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->video && + selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->video) { + selectedSinkMappingConfiguration->postProcessingVideo = + baseSinkMappingConfiguration->video; + } else if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->postProcessingVideo && + selectedSinkMappingConfiguration->video != + baseSinkMappingConfiguration->postProcessingVideo) { + selectedSinkMappingConfiguration->postProcessingVideo = + baseSinkMappingConfiguration->postProcessingVideo; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for postProcessingVideo sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.stills.bpp == + baseGraphConfigurationHeader->settingsKey.stills.bpp && + selectedGraphConfigurationHeader->settingsKey.stills.width == + baseGraphConfigurationHeader->settingsKey.stills.width && + selectedGraphConfigurationHeader->settingsKey.stills.height == + baseGraphConfigurationHeader->settingsKey.stills.height && + selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->stills && + selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->stills && + selectedSinkMappingConfiguration->postProcessingVideo != + baseSinkMappingConfiguration->stills) { + selectedSinkMappingConfiguration->stills = baseSinkMappingConfiguration->stills; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for stills sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == + baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == + baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == + baseGraphConfigurationHeader->settingsKey.videoIr.height) { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->videoIr; + } else if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == + baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == + baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == + baseGraphConfigurationHeader->settingsKey.previewIr.height) { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->previewIr; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for videoIr sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == + baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == + baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == + baseGraphConfigurationHeader->settingsKey.videoIr.height && + selectedSinkMappingConfiguration->videoIr != baseSinkMappingConfiguration->videoIr) { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->videoIr; + } else if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == + baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == + baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == + baseGraphConfigurationHeader->settingsKey.previewIr.height && + selectedSinkMappingConfiguration->videoIr != + baseSinkMappingConfiguration->previewIr) { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->previewIr; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for previewIr sink."); + } + } +} diff --git a/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.h b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.h new file mode 100644 index 0000000..73336c7 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once +#include "StaticGraphAutogen.h" +#include "StaticGraphBinaryAutogen.h" + +struct StaticReaderBinaryData { + void* data = nullptr; + uint32_t size = 0; +}; + +typedef enum { + enPreview, + enVideo, + enStills, + enRaw, + enIr, + enNumOfOutPins + +} DataRangePins; + +typedef struct DriverDesc { + uint32_t format; + uint32_t width; + uint32_t height; + uint32_t fps; + +} DriverDesc; + +typedef struct DataRangeHeader { + uint32_t NumberOfPinResolutions[enNumOfOutPins]; + +} DataRangeHeader; + +typedef struct { + uint32_t key; + uint32_t value; +} GraphHashCode; + +typedef struct { + uint32_t numOfGraphs; + GraphHashCode* hashCodes; +} GraphHashCodesTable; + +class StaticGraphReader { + public: + StaticGraphReader() = default; + StaticGraphStatus Init(StaticReaderBinaryData& binaryGraphSettings); + StaticGraphStatus GetStaticGraphConfig(GraphConfigurationKey& settingsKey, + IStaticGraphConfig** graph); + static const uint32_t staticGraphCommonHashCode = 361789904; // autogenerated + private: + void GetSinkMappingConfiguration(GraphConfigurationHeader* baseGraphConfigurationHeader, + VirtualSinkMapping* baseSinkMappingConfiguration, + GraphConfigurationHeader* selectedGraphConfigurationHeader, + VirtualSinkMapping* selectedSinkMappingConfiguration); + BinaryHeader _binaryHeader; + GraphConfigurationHeader* _graphConfigurationHeaders = nullptr; + SensorMode* _sensorModes = nullptr; + int8_t* _configurationData = nullptr; +}; diff --git a/modules/ipu_desc/ipu8/StaticGraphTypesAutogen.h b/modules/ipu_desc/ipu8/StaticGraphTypesAutogen.h new file mode 100644 index 0000000..11d3515 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphTypesAutogen.h @@ -0,0 +1,437 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#ifdef STATIC_GRAPH_USE_IA_AIC_TYPES +#define STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_aic_types.h" +typedef aic::ImagingKernelGroup StaticGraphNodeKernels; +typedef aic::ia_pac_kernel_info StaticGraphPacRunKernel; +typedef aic::IaAicFragmentDesc StaticGraphFragmentDesc; +#endif + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_isp_bxt_types.h" +#include "ia_pal_types_isp_parameters_autogen.h" +#if (IA_RESOLUTION_STATIC_GRAPH_PACK != 4) +#error "Static graph resulution structs packing alignment is defferent than defined in ia_types.h" +#endif +typedef ia_binary_data StaticGraphKernelSystemApi; +typedef ia_rectangle StaticGraphKernelResCrop; +typedef ia_isp_bxt_resolution_info StaticGraphKernelRes; +typedef ia_isp_bxt_bpp_info_t StaticGraphCompKernelBpp; +typedef ia_isp_bxt_run_kernels StaticGraphRunKernel; +typedef ia_pal_system_api_io_buffer_1_4_t StaticGraphKernelSystemApiIoBuffer1_4; +#endif + +#ifdef STATIC_GRAPH_LOG +#define SG_PRINTF(fmt, ...) \ + do { \ + printf(fmt, ##__VA_ARGS__); \ + printf("\n"); \ + } while ((void)0, 0) +#define STATIC_GRAPH_LOG(...) SG_PRINTF(__VA_ARGS__) +#else +#define STATIC_GRAPH_LOG(...) ((void)0) +#endif + +enum class NodeResourceId : uint8_t { + Lbff = 0, + SwIsys = 2, + SwSegnet = 3, + SwGdc = 4, + SwScaler = 5, + SwNntm = 6, +}; + +enum class StaticGraphStatus : uint8_t { SG_OK = 0, SG_ERROR = 1 }; + +enum class VirtualSink : uint8_t { + PreviewSink, + VideoSink, + PostProcessingVideoSink, + StillsSink, + ThumbnailSink, + RawSink, + RawPdafSink, + RawDolLongSink, + RawCvSink, + VideoIrSink, + PreviewIrSink, +}; + +enum class HwSink : uint8_t { + Disconnected, + AeOutSink, + AfStdOutSink, + AwbStdOutSink, + AwbSatOutSink, + ImageMpSink, + ImageDpSink, + GmvMatchOutSink, + ProcessedMainSink, + ProcessedSecondarySink, + PdafOutSink, + AwbSveOutSink, + IrAeOutSink, + IrAfStdOutSink, + IrAwbStdOutSink, + IrAwbSatOutSink, + IrMpSink, + RawIsysSink, + RawIsysDolLongSink, + RawIsysPdafSink, + RawIsysCvSink, +}; + +#pragma pack(push, 4) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES +// ia_isp_bxt_bpp_info_t +struct StaticGraphCompKernelBpp { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +// ia_rectangle +struct StaticGraphKernelResCrop { + int32_t left = 0; + int32_t top = 0; + int32_t right = 0; + int32_t bottom = 0; +}; + +// ia_isp_bxt_resolution_info +struct StaticGraphKernelRes { + int32_t input_width = 0; + int32_t input_height = 0; + StaticGraphKernelResCrop input_crop; + int32_t output_width = 0; + int32_t output_height = 0; + StaticGraphKernelResCrop output_crop; +}; + +// ia_pal_system_api_io_buffer_1_4_t; +// We add only the fields that are used by tests +struct StaticGraphKernelSystemApiIoBuffer1_4 { + uint32_t x_output_offset_per_stripe[4]; +}; + +#endif +struct StaticGraphKernelBppConfiguration { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +struct StaticGraphPlaneCompressionConfiguration { + uint8_t isEnabled = 0; + uint8_t tsAlignInterval = 0; + uint16_t rowsOfTiles = 0; + uint32_t pixelsOffset = 0; + uint32_t tsOffset = 0; + uint32_t rowOfTilesStride = 0; + uint8_t bpp = 0; + uint8_t encoderPlaneId = 0; + uint8_t decoderPlaneId = 0; + uint8_t isLossy = 0; + uint8_t isFootprint = 0; + uint8_t footprintCompressionRatio = 0; + uint8_t lossyRatioPlus = 0; + uint8_t lossyRatioMins = 0; + uint8_t lossyInstUpper = 0; + uint8_t lossyInstLower = 0; + uint8_t initHistory = 0; + uint8_t initQp = 0; + uint8_t maxQp = 0; + uint8_t minQp = 0; + uint8_t windowSize = 0; + uint8_t maxQpInc = 0; + uint8_t maxQpDec = 0; + uint8_t qpIncReset = 0; + uint8_t logFootprintGuardBand = 0; +}; + +struct StaticGraphLinkCompressionConfiguration { + uint8_t isEnabled = 0; + StaticGraphPlaneCompressionConfiguration lumaCompressionConfiguration; + StaticGraphPlaneCompressionConfiguration chromaCompressionConfiguration; +}; + +struct StaticGraphLinkConfiguration { + uint32_t bufferSize = 0; + uint8_t streamingMode = 0; +}; + +struct VirtualSinkMapping { + uint8_t preview = 0; + uint8_t video = 0; + uint8_t postProcessingVideo = 0; + uint8_t stills = 0; + uint8_t thumbnail = 0; + uint8_t raw = 0; + uint8_t rawPdaf = 0; + uint8_t rawDolLong = 0; + uint8_t rawCv = 0; + uint8_t videoIr = 0; + uint8_t previewIr = 0; +}; + +struct SystemApiRecordHeader { + uint16_t systemApiUuid = 0; +}; + +#pragma pack(pop) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES + +// ia_binary_data +struct StaticGraphKernelSystemApi { + void* data; + uint32_t size; +}; + +// ia_isp_bxt_run_kernels +struct StaticGraphRunKernel { + uint32_t stream_id; + uint32_t kernel_uuid; + int32_t enable; + StaticGraphKernelRes* resolution_info; + StaticGraphKernelRes* resolution_history; + uint32_t metadata[4]; + StaticGraphCompKernelBpp bpp_info; + uint32_t output_count; + StaticGraphKernelSystemApi system_api; +}; +#endif + +#ifndef STATIC_GRAPH_USE_IA_AIC_TYPES + +struct StaticGraphFragmentDesc { + uint16_t inputWidth = 0; + uint16_t outputWidth = 0; + uint16_t left = 0; +}; + +// ia_pac_kernel_info +struct StaticGraphPacRunKernel { + StaticGraphRunKernel run_kernel; + StaticGraphFragmentDesc* fragment_descs; + bool fragments_defined; +}; + +// ImagingKernelGroup +struct StaticGraphNodeKernels { + uint32_t kernelCount; + StaticGraphPacRunKernel* kernelList; + uint32_t operationMode; + uint32_t streamId; +}; + +#endif +struct HwBitmaps { + uint32_t rbm[4] = {}; + uint32_t deb[4] = {}; + uint32_t teb[2] = {}; + uint32_t reb[4] = {}; +}; + +enum class NodeTypes : uint8_t { + Isys, + Cb, + Sw, +}; + +enum class GraphElementType : uint8_t { + // Sources + Sensor, + LscBuffer, + PdafBuffer, + SensorDolLongExposure, + LscBufferIr, + // Sinks + AeOut, + AfStdOut, + AwbStdOut, + AwbSatOut, + ImageMp, + ImageDp, + GmvMatchOut, + ProcessedMain, + ProcessedSecondary, + PdafOut, + AwbSveOut, + IrAeOut, + IrAfStdOut, + IrAwbStdOut, + IrAwbSatOut, + IrMp, + RawIsys, + RawIsysDolLong, + RawIsysPdaf, + RawIsysCv, + // Outer Nodes + Isys, + LbffBayerNoGmvNoTnrNoSap, + LbffBayerWithGmvNoTnrNoSap, + SwGdc, + LbffBayerNoGmvWithTnrNoSap, + LbffBayerWithGmvWithTnrNoSap, + SwNntm, + SwScaler, + IsysPdaf2, + LbffBayerPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf2WithGmvWithTnrNoSap, + LbffBayerPdaf3NoGmvNoTnrNoSap, + LbffBayerPdaf3WithGmvNoTnrNoSap, + LbffBayerPdaf3NoGmvWithTnrNoSap, + LbffBayerPdaf3WithGmvWithTnrNoSap, + IsysDol, + LbffDol2InputsNoGmvNoTnrNoSap, + LbffDol2InputsWithGmvNoTnrNoSap, + LbffDol2InputsNoGmvWithTnrNoSap, + LbffDol2InputsWithGmvWithTnrNoSap, + LbffDolSmooth, + LbffDol3InputsNoGmvNoTnrNoSap, + LbffDol3InputsWithGmvNoTnrNoSap, + LbffDol3InputsNoGmvWithTnrNoSap, + LbffDol3InputsWithGmvWithTnrNoSap, + LbffRgbIrNoGmvNoTnrNoSap, + LbffRgbIrIrNoGmvNoTnrNoSap, + LbffRgbIrWithGmvNoTnrNoSap, + LbffRgbIrNoGmvWithTnrNoSap, + LbffRgbIrIrNoGmvWithTnrNoSap, + LbffRgbIrWithGmvWithTnrNoSap, + LbffIrNoGmvNoTnrNoSap, + LbffIrWithGmvNoTnrNoSap, + LbffIrNoGmvWithTnrNoSap, + LbffIrWithGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap, + IsysWithCv, + SwSegnet, + LbffBayerNoGmvNoTnrWithSap, + LbffBayerWithGmvNoTnrWithSap, + LbffBayerNoGmvWithTnrWithSap, + LbffBayerWithGmvWithTnrWithSap, + IsysPdaf2WithCv, + LbffBayerPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf2WithGmvNoTnrWithSap, + LbffBayerPdaf2NoGmvWithTnrWithSap, + LbffBayerPdaf2WithGmvWithTnrWithSap, + LbffBayerPdaf3NoGmvNoTnrWithSap, + LbffBayerPdaf3WithGmvNoTnrWithSap, + LbffBayerPdaf3NoGmvWithTnrWithSap, + LbffBayerPdaf3WithGmvWithTnrWithSap, + IsysDolWithCv, + LbffDol2InputsNoGmvNoTnrWithSap, + LbffDol2InputsWithGmvNoTnrWithSap, + LbffDol2InputsNoGmvWithTnrWithSap, + LbffDol2InputsWithGmvWithTnrWithSap, + LbffDol3InputsNoGmvNoTnrWithSap, + LbffDol3InputsWithGmvNoTnrWithSap, + LbffDol3InputsNoGmvWithTnrWithSap, + LbffDol3InputsWithGmvWithTnrWithSap, + LbffRgbIrNoGmvNoTnrWithSap, + LbffRgbIrWithGmvNoTnrWithSap, + LbffRgbIrNoGmvWithTnrWithSap, + LbffRgbIrWithGmvWithTnrWithSap, + LbffIrNoGmvNoTnrWithSap, + LbffIrWithGmvNoTnrWithSap, + LbffIrNoGmvWithTnrWithSap, + LbffIrWithGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap, +}; + +enum class LinkType : uint8_t { + Source2Node, + Node2Node, + Node2Sink, + Node2Self, +}; + +enum class FormatType : uint8_t { + SINGLE_PL_8_P, + SINGLE_PL_8, + SINGLE_PL_8_MSB, + SINGLE_PL_10_P, + SINGLE_PL_10, + SINGLE_PL_10_MSB, + SINGLE_PL_12_P, + SINGLE_PL_12, + SINGLE_PL_12_MSB, + SINGLE_PL_16, + YUV420_8_SP_P, + YUV420_8_SP_P_REV, + YUV420_8_SP_MSB, + YUV420_8_SP_REV_MSB, + YUV420_8_SP_LSB, + YUV420_8_SP_REV_LSB, + YUV420_10_SP_P, + YUV420_10_SP_P_REV, + YUV420_10_SP_MSB, + YUV420_10_SP_REV_MSB, + YUV420_10_SP_LSB, + YUV420_10_SP_REV_LSB, + YUV420_12_SP_P, + YUV420_12_SP_P_REV, + YUV420_12_SP_MSB, + YUV420_12_SP_REV_MSB, + YUV420_12_SP_LSB, + YUV420_12_SP_REV_LSB, + YUV420_16_SP, + YUV420_16_SP_REV, + YUV420_8_FP_P, + YUV420_8_FP_P_REV, + YUV420_8_FP_MSB, + YUV420_8_FP_REV_MSB, + YUV420_8_FP_LSB, + YUV420_8_FP_REV_LSB, + YUV420_10_FP_P, + YUV420_10_FP_P_REV, + YUV420_10_FP_MSB, + YUV420_10_FP_REV_MSB, + YUV420_10_FP_LSB, + YUV420_10_FP_REV_LSB, + YUV420_12_FP_P, + YUV420_12_FP_P_REV, + YUV420_12_FP_MSB, + YUV420_12_FP_REV_MSB, + YUV420_12_FP_LSB, + YUV420_12_FP_REV_LSB, + YUV420_16_FP, + YUV420_16_FP_REV, + META_16, + YUV420_8_SP_P_GFX, + YUV420_10_SP_MSB_GFX, + YUV420_8_1P_P, + YUV422_YUYV_8_1P_P, + YUV422_8_SP_P, + YUV422_8_SP_P_REV, + META_8, + SINGLE_PL_10_MP, + SINGLE_PL_12_MP, + RGBA_8_1P_P, + YUVRGB444_8_FP_P, + Y_8_1P_P, +}; diff --git a/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.cpp new file mode 100644 index 0000000..49818d8 --- /dev/null +++ b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.cpp @@ -0,0 +1,379 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "TerminalDescriptorAutogen.h" + +TerminalDescriptor SW_ISYSTerminalDesc[] = { + { + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAME_IN", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_STREAM_IN", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT_UPIPE", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 36280, // crop_bpp_adjust_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_CV", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 26150, // isys_drainer_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT_PDAF", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_PDAF", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_DOL_LONG", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 50407, // is_odr_c + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_DOL_LONG", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 50407, // is_odr_c + }, +}; + +TerminalDescriptor LBFFTerminalDesc[] = { + { + LBFF_TERMINAL_LOAD_ALGO_CACHED, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_CACHED", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAG_SEQ", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SYSTEM, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SYSTEM", + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SR_FRAME_IN", + PAC_BUFFER_TYPE_SR_FRAME_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN_OUT, + 0, + }, + { + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_MAIN_DATA_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 52446, // ifd_pipe_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_LONG_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 24678, // ifd_pipe_long_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 4386, // ifd_pipe_short_smth_1_4 + }, + { + LBFF_TERMINAL_CONNECT_LSC_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_LSC_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 29313, // ifd_lsc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_PDAF_DATA_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 22427, // ifd_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AE_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_AE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 62556, // odr_ae_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AF_STD_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 59136, // odr_af_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_STD_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 38544, // odr_awb_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SAT_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 1248, // odr_awb_sat_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_PDAF_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 26892, // odr_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_IR_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_IR_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 60297, // odr_ir_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BURST_ISP_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BNLM_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 53535, // odr_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_GMV_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 51073, // ifd_gmv_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SVE_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 53430, // odr_awb_sve_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DPC_PDAF_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 54812, // odr_dpc_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_MATCH_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 41148, // odr_gmv_match_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_FEATURE_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 7416, // odr_gmv_feature_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 7357, // ifd_tnr_sp_bc_yuv4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_RS_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 62054, // ifd_tnr_sp_bc_rs4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 63731, // odr_tnr_sp_bc_rs4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_YUV_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 16295, // ifd_tnr_fp_blend_yuvnm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BLEND_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 5215, // odr_tnr_fp_yuvn_1_4 + }, + { + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_TNR_SCALER_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 65437, // odr_tnr_scale_fp_yuv4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_MP_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 16460, // odr_ofs_mp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_DP_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 37951, // odr_ofs_dp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BNLM_SM_INPUT", PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 35263, // ifd_segmap_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_XNR_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 9241, // ifd_segmap_xnr_1_4 + }, + { + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_ACM_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 51914, // ifd_segmap_acm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 47873, // ifd_segmap_tnr_bc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_SM_INPUT", PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 14619, // ifd_segmap_tnr_blend_1_4 + }, + { + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_CAS_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 20893, // ifd_segmap_cas_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BGB_BM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BGB_YUV_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // No graphs found + }, +}; + +TerminalDescriptor SW_SEGNETTerminalDesc[] = { + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // sw_segnet + }, + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 0, // sw_segnet + }, +}; + +TerminalDescriptor SW_GDCTerminalDesc[] = { + { + SW_GDC_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 5637, // gdc7_1 + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, +}; + +TerminalDescriptor SW_SCALERTerminalDesc[] = { + { + SW_SCALER_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 19706, // sw_scaler + }, + { + SW_SCALER_TERMINAL_CONNECT_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 19706, // sw_scaler + }, +}; + +TerminalDescriptor SW_NNTMTerminalDesc[] = { + { + SW_NNTM_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 46539, // nntm_1_0 + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, +}; + +int CountOfSW_ISYSTerminalDesc = sizeof(SW_ISYSTerminalDesc) / sizeof(SW_ISYSTerminalDesc[0]); +int CountOfLBFFTerminalDesc = sizeof(LBFFTerminalDesc) / sizeof(LBFFTerminalDesc[0]); +int CountOfSW_SEGNETTerminalDesc = sizeof(SW_SEGNETTerminalDesc) / sizeof(SW_SEGNETTerminalDesc[0]); +int CountOfSW_GDCTerminalDesc = sizeof(SW_GDCTerminalDesc) / sizeof(SW_GDCTerminalDesc[0]); +int CountOfSW_SCALERTerminalDesc = sizeof(SW_SCALERTerminalDesc) / sizeof(SW_SCALERTerminalDesc[0]); +int CountOfSW_NNTMTerminalDesc = sizeof(SW_NNTMTerminalDesc) / sizeof(SW_NNTMTerminalDesc[0]); diff --git a/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.h b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.h new file mode 100644 index 0000000..f19d7a1 --- /dev/null +++ b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +typedef enum _TerminalType { + TERMINAL_TYPE_LOAD, + TERMINAL_TYPE_CONNECT, + TERMINAL_TYPE_N +} TerminalType; + +typedef enum _PacBufferType { + PAC_BUFFER_TYPE_PARAM_IN, + PAC_BUFFER_TYPE_PARAM_OUT, + PAC_BUFFER_TYPE_PROGRAM, + PAC_BUFFER_TYPE_SPATIAL_IN, + PAC_BUFFER_TYPE_SPATIAL_OUT, + PAC_BUFFER_TYPE_FRAME_IN, + PAC_BUFFER_TYPE_FRAME_OUT, + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_SR_FRAME_IN, + PAC_BUFFER_TYPE_SR_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_NONE, +} PacBufferType; + +typedef enum _TerminalBufferType { + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_BUFFER_TYPE_N +} TerminalBufferType; + +typedef enum _TerminalDirection { + TERMINAL_DIR_IN, + TERMINAL_DIR_OUT, + TERMINAL_DIR_IN_OUT, + TERMINAL_DIR_N +} TerminalDirection; + +typedef struct _TerminalDescriptor { + int TerminalId; + TerminalType TerminalType; + const char* TerminalName; + PacBufferType PacBufferType; + TerminalBufferType TerminalBufferType; + TerminalDirection TerminalDirection; + int TerminalLinkedKernel; +} TerminalDescriptor; + +enum SW_ISYSTerminalID { + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, + SW_ISYS_TERMINAL_CONNECT_INPUT, + SW_ISYS_TERMINAL_CONNECT_OUTPUT, + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, +}; + +enum LBFFTerminalID { + LBFF_TERMINAL_LOAD_ALGO_CACHED, + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + LBFF_TERMINAL_LOAD_SYSTEM, + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, + LBFF_TERMINAL_CONNECT_LSC_INPUT, + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, + LBFF_TERMINAL_CONNECT_AE_OUTPUT, + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_IR_OUTPUT, + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_INPUT, + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, + LBFF_TERMINAL_CONNECT_BC_OUTPUT, + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, +}; + +enum SW_SEGNETTerminalID { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, +}; + +enum SW_GDCTerminalID { + SW_GDC_TERMINAL_CONNECT_INPUT, + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, +}; + +enum SW_SCALERTerminalID { + SW_SCALER_TERMINAL_CONNECT_INPUT, + SW_SCALER_TERMINAL_CONNECT_OUTPUT, +}; + +enum SW_NNTMTerminalID { + SW_NNTM_TERMINAL_CONNECT_INPUT, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, +}; + +extern TerminalDescriptor SW_ISYSTerminalDesc[]; +extern TerminalDescriptor LBFFTerminalDesc[]; +extern TerminalDescriptor SW_SEGNETTerminalDesc[]; +extern TerminalDescriptor SW_GDCTerminalDesc[]; +extern TerminalDescriptor SW_SCALERTerminalDesc[]; +extern TerminalDescriptor SW_NNTMTerminalDesc[]; + +extern int CountOfSW_ISYSTerminalDesc; +extern int CountOfLBFFTerminalDesc; +extern int CountOfSW_SEGNETTerminalDesc; +extern int CountOfSW_GDCTerminalDesc; +extern int CountOfSW_SCALERTerminalDesc; +extern int CountOfSW_NNTMTerminalDesc; diff --git a/modules/ipu_desc/ipu8/cb_payload_descriptor.h b/modules/ipu_desc/ipu8/cb_payload_descriptor.h new file mode 100644 index 0000000..23a7fe7 --- /dev/null +++ b/modules/ipu_desc/ipu8/cb_payload_descriptor.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once + +#include + +typedef struct _cb_payload_descriptor_t +{ + // from _dev_ids.h + uint32_t device_id; + + // Offset from Base address of the FF. Configuration should start from the HW register at this offset + uint32_t offset_in_device; + + // Size of the section in bytes + uint16_t payload_size; + + // Section start offset from location of terminal payload in DDR + uint16_t offset_in_payload; +} cb_payload_descriptor_t; + +typedef struct payload_descriptor_s +{ + uint32_t number_of_sections; + cb_payload_descriptor_t sections[128]; +} payload_descriptor_t; diff --git a/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h new file mode 100644 index 0000000..f5bff60 --- /dev/null +++ b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h @@ -0,0 +1,242 @@ +/* + * INTEL CONFIDENTIAL + * Copyright (c) 2025 Intel Corporation + * All Rights Reserved. + * + * The source code contained or described herein and all documents related to + * the source code ("Material") are owned by Intel Corporation or its + * suppliers or licensors.Title to the Material remains with Intel + * Corporation or its suppliers and licensors.The Material may contain trade + * secrets and proprietary and confidential information of Intel Corporation + * and its suppliers and licensors, and is protected by worldwide copyright + * and trade secret laws and treaty provisions.No part of the Material may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without Intel's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or + * delivery of the Materials, either expressly, by implication, inducement, + * estoppel or otherwise. Any license under such intellectual property rights + * must be express and approved by Intel in writing. + * + * Unless otherwise agreed by Intel in writing, you may not remove or alter + * this notice or any other notice embedded in Materials by Intel or Intels + * suppliers or licensors in any way. + */ + +#ifndef IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DESCRIPTORS_H +#define IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DESCRIPTORS_H + +#include +#include "cb_payload_descriptor.h" + +static payload_descriptor_t lbff_0_descriptors = { + 91, + { + {LBFF_DEVICE_ID_DOL_lite_1_2, 0x0U, 0x30U, 0x0U}, + {LBFF_DEVICE_ID_DOL_lite_1_2, 0x100U, 0xacU, 0x30U}, + {LBFF_DEVICE_ID_BXT_BLC, 0x0U, 0x24U, 0xdcU}, + {LBFF_DEVICE_ID_Linearization2_0, 0x0U, 0x2174U, 0x100U}, + {LBFF_DEVICE_ID_LSC_1_2, 0x8U, 0x134U, 0x2274U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x0U, 0x200U, 0x23a8U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x278U, 0xb4U, 0x25a8U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x330U, 0x4U, 0x265cU}, + {LBFF_DEVICE_ID_DPC_2_2, 0x43cU, 0x44U, 0x2660U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x4bcU, 0x88U, 0x26a4U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x3000U, 0x4U, 0x272cU}, + {LBFF_DEVICE_ID_PEXT_1_0, 0x0U, 0x4U, 0x2730U}, + {LBFF_DEVICE_ID_PEXT_1_0, 0xcU, 0x8U, 0x2734U}, + {LBFF_DEVICE_ID_PAFStatistics_1_2, 0x0U, 0x19cU, 0x273cU}, + {LBFF_DEVICE_ID_RGBS_Grid_1_1, 0x0U, 0x38U, 0x28d8U}, + {LBFF_DEVICE_ID_CCM_3A_2_0, 0x0U, 0x44U, 0x2910U}, + {LBFF_DEVICE_ID_AEStatistics_2_1, 0x0U, 0x20U, 0x2954U}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x0U, 0x2cU, 0x2974U}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x30U, 0x8U, 0x29a0U}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x3cU, 0x30U, 0x29a8U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x0U, 0x1cU, 0x29d8U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x24U, 0x1dcU, 0x29f4U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x204U, 0x2c8U, 0x2bd0U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x4d0U, 0x14U, 0x2e98U}, + {LBFF_DEVICE_ID_GD_2_2, 0x0U, 0x78U, 0x2eacU}, + {LBFF_DEVICE_ID_GD_2_2, 0x100U, 0x4U, 0x2f24U}, + {LBFF_DEVICE_ID_GD_2_2, 0x20cU, 0x4U, 0x2f28U}, + {LBFF_DEVICE_ID_WB_1_1, 0x0U, 0x30U, 0x2f2cU}, + {LBFF_DEVICE_ID_Smurf_bnlm_1_0, 0x0U, 0x8U, 0x2f5cU}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x0U, 0x188U, 0x2f64U}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x18cU, 0x43cU, 0x30ecU}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x5dcU, 0x104U, 0x3528U}, + {LBFF_DEVICE_ID_BXT_Demosaic, 0x0U, 0x34U, 0x362cU}, + {LBFF_DEVICE_ID_VCSC_2_0_b, 0x0U, 0x24U, 0x3660U}, + {LBFF_DEVICE_ID_GLTM_2_0, 0x0U, 0x33cU, 0x3684U}, + {LBFF_DEVICE_ID_Smurf_xnr_1_0, 0x0U, 0x8U, 0x39c0U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x4U, 0xcU, 0x39c8U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x20U, 0x5cU, 0x39d4U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x1004U, 0x18U, 0x3a30U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x102cU, 0x1ccU, 0x3a48U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x2000U, 0x180U, 0x3c14U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x3004U, 0x38U, 0x3d94U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x304cU, 0x1e4U, 0x3dccU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x4000U, 0x180U, 0x3fb0U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x5004U, 0x4U, 0x4130U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x5020U, 0x1cU, 0x4134U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x504cU, 0x1c8U, 0x4150U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x6000U, 0x180U, 0x4318U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x7004U, 0x1cU, 0x4498U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x7024U, 0x20U, 0x44b4U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x8004U, 0x48U, 0x44d4U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x805cU, 0x190U, 0x451cU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x9000U, 0x180U, 0x46acU}, + {LBFF_DEVICE_ID_VCR_3_1, 0x0U, 0x4U, 0x482cU}, + {LBFF_DEVICE_ID_VCR_3_1, 0x40U, 0x20U, 0x4830U}, + {LBFF_DEVICE_ID_GLIM_2_0, 0x0U, 0x328U, 0x4850U}, + {LBFF_DEVICE_ID_Smurf_acm_1_0, 0x0U, 0x8U, 0x4b78U}, + {LBFF_DEVICE_ID_ACM_1_2, 0x0U, 0x444U, 0x4b80U}, + {LBFF_DEVICE_ID_ACM_1_2, 0x470U, 0x2b0U, 0x4fc4U}, + {LBFF_DEVICE_ID_GammaTM_V4, 0x0U, 0x1c74U, 0x5274U}, + {LBFF_DEVICE_ID_CSC_1_1, 0x0U, 0x24U, 0x6ee8U}, + {LBFF_DEVICE_ID_B2I_DS_1_1, 0x0U, 0x8U, 0x6f0cU}, + {LBFF_DEVICE_ID_B2I_DS_1_1, 0x1cU, 0x208U, 0x6f14U}, + {LBFF_DEVICE_ID_TNR_Scaler_LB_1_1, 0x0U, 0x4U, 0x711cU}, + {LBFF_DEVICE_ID_TNR_Scaler_LB_1_1, 0x44U, 0x28U, 0x7120U}, + {LBFF_DEVICE_ID_GMV_Statistics_1_1, 0x0U, 0x1cU, 0x7148U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0x0U, 0x18U, 0x7164U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0x28U, 0xc0U, 0x717cU}, + {LBFF_DEVICE_ID_Smurf_tnr_bc_1_0, 0x0U, 0x8U, 0x723cU}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x0U, 0x20U, 0x7244U}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x100U, 0x54U, 0x7264U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x0U, 0x10U, 0x72b8U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x30U, 0x2cU, 0x72c8U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x60U, 0x4U, 0x72f4U}, + {LBFF_DEVICE_ID_Smurf_tnr_blend_1_0, 0x0U, 0x8U, 0x72f8U}, + {LBFF_DEVICE_ID_TNR7_BLEND_1_1, 0x0U, 0x104U, 0x7300U}, + {LBFF_DEVICE_ID_TNR7_BLEND_1_1, 0x204U, 0x148U, 0x7404U}, + {LBFF_DEVICE_ID_TNR_Scaler_FP_1_1, 0x0U, 0x4U, 0x754cU}, + {LBFF_DEVICE_ID_TNR_Scaler_FP_1_1, 0x44U, 0x28U, 0x7550U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x0U, 0x4U, 0x7578U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x1cU, 0x40cU, 0x757cU}, + {LBFF_DEVICE_ID_Smurf_cas_1_0, 0x0U, 0x8U, 0x7988U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x0U, 0x4U, 0x7990U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x8U, 0x4U, 0x7994U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x10U, 0x10U, 0x7998U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x40U, 0x168U, 0x79a8U}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x0U, 0x4U, 0x7b10U}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x1cU, 0x40cU, 0x7b14U}, + {LBFF_DEVICE_ID_BGB_1_0, 0x0U, 0x4U, 0x7f20U}, + {LBFF_DEVICE_ID_B2I_DS_output_1_1, 0x0U, 0x8U, 0x7f24U}, + {LBFF_DEVICE_ID_B2I_DS_output_1_1, 0x1cU, 0x208U, 0x7f2cU}, + + } + +}; + +static payload_descriptor_t lbff_1_descriptors = { + 43, + { + {LBFF_DEVICE_ID_DOL_lite_1_2, 0xa0U, 0x8U, 0x0U}, + {LBFF_DEVICE_ID_LSC_1_2, 0x0U, 0x8U, 0x8U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x338U, 0x104U, 0x10U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x488U, 0x8U, 0x114U}, + {LBFF_DEVICE_ID_PEXT_1_0, 0x4U, 0x4U, 0x11cU}, + {LBFF_DEVICE_ID_RGBS_Grid_1_1, 0x40U, 0xcU, 0x120U}, + {LBFF_DEVICE_ID_AEStatistics_2_1, 0x24U, 0x180U, 0x12cU}, + {LBFF_DEVICE_ID_AEStatistics_2_1, 0x1c0U, 0xcU, 0x2acU}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x80U, 0xcU, 0x2b8U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x1cU, 0x8U, 0x2c4U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x200U, 0x4U, 0x2ccU}, + {LBFF_DEVICE_ID_Smurf_bnlm_1_0, 0x10U, 0x18U, 0x2d0U}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x5ccU, 0x10U, 0x2e8U}, + {LBFF_DEVICE_ID_Smurf_xnr_1_0, 0x10U, 0x18U, 0x2f8U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x0U, 0x4U, 0x310U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x10U, 0x10U, 0x314U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x1000U, 0x4U, 0x324U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x101cU, 0x10U, 0x328U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x3000U, 0x4U, 0x338U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x303cU, 0x10U, 0x33cU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x5000U, 0x4U, 0x34cU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x503cU, 0x10U, 0x350U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x7000U, 0x4U, 0x360U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x8000U, 0x4U, 0x364U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x804cU, 0x10U, 0x368U}, + {LBFF_DEVICE_ID_Smurf_acm_1_0, 0x10U, 0x18U, 0x378U}, + {LBFF_DEVICE_ID_B2I_DS_1_1, 0x8U, 0x10U, 0x390U}, + {LBFF_DEVICE_ID_TNR_Scaler_LB_1_1, 0x40U, 0x4U, 0x3a0U}, + {LBFF_DEVICE_ID_GMV_Statistics_1_1, 0x1cU, 0xcU, 0x3a4U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0x200U, 0x10U, 0x3b0U}, + {LBFF_DEVICE_ID_Smurf_tnr_bc_1_0, 0x10U, 0x18U, 0x3c0U}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x248U, 0x10U, 0x3d8U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x68U, 0x10U, 0x3e8U}, + {LBFF_DEVICE_ID_Smurf_tnr_blend_1_0, 0x10U, 0x18U, 0x3f8U}, + {LBFF_DEVICE_ID_TNR_Scaler_FP_1_1, 0x40U, 0x4U, 0x410U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x4U, 0x18U, 0x414U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x1010U, 0xcU, 0x42cU}, + {LBFF_DEVICE_ID_Smurf_cas_1_0, 0x10U, 0x18U, 0x438U}, + {LBFF_DEVICE_ID_CAS_1_1, 0xcU, 0x4U, 0x450U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x1a8U, 0x8U, 0x454U}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x4U, 0x18U, 0x45cU}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x1010U, 0xcU, 0x474U}, + {LBFF_DEVICE_ID_B2I_DS_output_1_1, 0x8U, 0x10U, 0x480U}, + + } + +}; + +static payload_descriptor_t lbff_2_descriptors = { + 36, + { + {LBFF_DEVICE_ID_ifd_pipe_1_4, 0x0U, 0xc4U, 0x0U}, + {LBFF_DEVICE_ID_ifd_pipe_long_1_4, 0x0U, 0xc4U, 0xc4U}, + {LBFF_DEVICE_ID_ifd_pipe_short_smth_1_4, 0x0U, 0xc4U, 0x188U}, + {LBFF_DEVICE_ID_ifd_lsc_1_4, 0x0U, 0xc4U, 0x24cU}, + {LBFF_DEVICE_ID_ifd_pdaf_1_4, 0x0U, 0xc4U, 0x310U}, + {LBFF_DEVICE_ID_odr_awb_std_1_4, 0x0U, 0xc4U, 0x3d4U}, + {LBFF_DEVICE_ID_odr_awb_sat_1_4, 0x0U, 0xc4U, 0x498U}, + {LBFF_DEVICE_ID_odr_awb_sve_1_4, 0x0U, 0xc4U, 0x55cU}, + {LBFF_DEVICE_ID_odr_ae_1_4, 0x0U, 0xc4U, 0x620U}, + {LBFF_DEVICE_ID_odr_af_std_1_4, 0x0U, 0xc4U, 0x6e4U}, + {LBFF_DEVICE_ID_odr_dpc_pdaf_1_4, 0x0U, 0xc4U, 0x7a8U}, + {LBFF_DEVICE_ID_odr_pdaf_1_4, 0x0U, 0xc4U, 0x86cU}, + {LBFF_DEVICE_ID_odr_ir_1_4, 0x0U, 0xc4U, 0x930U}, + {LBFF_DEVICE_ID_odr_burst_isp_1_4, 0x0U, 0xc4U, 0x9f4U}, + {LBFF_DEVICE_ID_ifd_segmap_bnlm_1_4, 0x0U, 0xc4U, 0xab8U}, + {LBFF_DEVICE_ID_odr_bnlm_1_4, 0x0U, 0xc4U, 0xb7cU}, + {LBFF_DEVICE_ID_ifd_segmap_xnr_1_4, 0x0U, 0xc4U, 0xc40U}, + {LBFF_DEVICE_ID_ifd_segmap_acm_1_4, 0x0U, 0xc4U, 0xd04U}, + {LBFF_DEVICE_ID_lbff_crop_espa_1_4, 0x0U, 0xcU, 0xdc8U}, + {LBFF_DEVICE_ID_lbff_crop_espa_1_4, 0x4cU, 0x14U, 0xdd4U}, + {LBFF_DEVICE_ID_ifd_gmv_1_4, 0x0U, 0xc4U, 0xde8U}, + {LBFF_DEVICE_ID_odr_gmv_feature_1_4, 0x0U, 0xc4U, 0xeacU}, + {LBFF_DEVICE_ID_odr_gmv_match_1_4, 0x0U, 0xc4U, 0xf70U}, + {LBFF_DEVICE_ID_ifd_tnr_sp_bc_yuv4nm1_1_4, 0x0U, 0xc4U, 0x1034U}, + {LBFF_DEVICE_ID_ifd_tnr_sp_bc_rs4nm1_1_4, 0x0U, 0xc4U, 0x10f8U}, + {LBFF_DEVICE_ID_ifd_segmap_tnr_bc_1_4, 0x0U, 0xc4U, 0x11bcU}, + {LBFF_DEVICE_ID_odr_tnr_sp_bc_rs4n_1_4, 0x0U, 0xc4U, 0x1280U}, + {LBFF_DEVICE_ID_ifd_tnr_fp_blend_yuvnm1_1_4, 0x0U, 0xc4U, 0x1344U}, + {LBFF_DEVICE_ID_ifd_segmap_tnr_blend_1_4, 0x0U, 0xc4U, 0x1408U}, + {LBFF_DEVICE_ID_odr_tnr_fp_yuvn_1_4, 0x0U, 0xc4U, 0x14ccU}, + {LBFF_DEVICE_ID_odr_tnr_scale_fp_yuv4n_1_4, 0x0U, 0xc4U, 0x1590U}, + {LBFF_DEVICE_ID_ifd_segmap_cas_1_4, 0x0U, 0xc4U, 0x1654U}, + {LBFF_DEVICE_ID_ifd_bgmap_1_4, 0x0U, 0xc4U, 0x1718U}, + {LBFF_DEVICE_ID_ifd_bg_yuv_1_4, 0x0U, 0xc4U, 0x17dcU}, + {LBFF_DEVICE_ID_odr_ofs_mp_1_4, 0x0U, 0xc4U, 0x18a0U}, + {LBFF_DEVICE_ID_odr_ofs_dp_1_4, 0x0U, 0xc4U, 0x1964U}, + + } + +}; + +static payload_descriptor_t lbff_3_descriptors = { + 6, + { + {LBFF_DEVICE_ID_DOL_lite_1_2, 0x200U, 0x164U, 0x0U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0xe8U, 0x100U, 0x200U}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x300U, 0x14U, 0x400U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x10U, 0x20U, 0x600U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x5cU, 0x4U, 0x800U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x20U, 0x20U, 0xa00U}, + + } + +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h new file mode 100644 index 0000000..b305386 --- /dev/null +++ b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h @@ -0,0 +1,115 @@ +/* + * INTEL CONFIDENTIAL + * Copyright (c) 2025 Intel Corporation + * All Rights Reserved. + * + * The source code contained or described herein and all documents related to + * the source code ("Material") are owned by Intel Corporation or its + * suppliers or licensors.Title to the Material remains with Intel + * Corporation or its suppliers and licensors.The Material may contain trade + * secrets and proprietary and confidential information of Intel Corporation + * and its suppliers and licensors, and is protected by worldwide copyright + * and trade secret laws and treaty provisions.No part of the Material may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without Intel's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or + * delivery of the Materials, either expressly, by implication, inducement, + * estoppel or otherwise. Any license under such intellectual property rights + * must be express and approved by Intel in writing. + * + * Unless otherwise agreed by Intel in writing, you may not remove or alter + * this notice or any other notice embedded in Materials by Intel or Intels + * suppliers or licensors in any way. + */ + +#ifndef IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DEV_IDS_H +#define IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DEV_IDS_H + +typedef enum lbff_device_id_t { + LBFF_DEVICE_ID_ifd_pipe_1_4 = 0U, + LBFF_DEVICE_ID_ifd_pipe_long_1_4 = 1U, + LBFF_DEVICE_ID_ifd_pipe_short_smth_1_4 = 2U, + LBFF_DEVICE_ID_DOL_lite_1_2 = 3U, + LBFF_DEVICE_ID_BXT_BLC = 4U, + LBFF_DEVICE_ID_Linearization2_0 = 5U, + LBFF_DEVICE_ID_ifd_lsc_1_4 = 6U, + LBFF_DEVICE_ID_LSC_1_2 = 7U, + LBFF_DEVICE_ID_DPC_2_2 = 8U, + LBFF_DEVICE_ID_ifd_pdaf_1_4 = 9U, + LBFF_DEVICE_ID_PEXT_1_0 = 10U, + LBFF_DEVICE_ID_PAFStatistics_1_2 = 11U, + LBFF_DEVICE_ID_RGBS_Grid_1_1 = 12U, + LBFF_DEVICE_ID_CCM_3A_2_0 = 13U, + LBFF_DEVICE_ID_AEStatistics_2_1 = 14U, + LBFF_DEVICE_ID_FR_Grid_1_0 = 15U, + LBFF_DEVICE_ID_odr_awb_std_1_4 = 16U, + LBFF_DEVICE_ID_odr_awb_sat_1_4 = 17U, + LBFF_DEVICE_ID_odr_awb_sve_1_4 = 18U, + LBFF_DEVICE_ID_odr_ae_1_4 = 19U, + LBFF_DEVICE_ID_odr_af_std_1_4 = 20U, + LBFF_DEVICE_ID_odr_dpc_pdaf_1_4 = 21U, + LBFF_DEVICE_ID_odr_pdaf_1_4 = 22U, + LBFF_DEVICE_ID_SVE_RGBIR_VRT_CTRL = 23U, + LBFF_DEVICE_ID_RGB_IR_2_0 = 24U, + LBFF_DEVICE_ID_odr_ir_1_4 = 25U, + LBFF_DEVICE_ID_GD_2_2 = 26U, + LBFF_DEVICE_ID_WB_1_1 = 27U, + LBFF_DEVICE_ID_odr_burst_isp_1_4 = 28U, + LBFF_DEVICE_ID_ifd_segmap_bnlm_1_4 = 29U, + LBFF_DEVICE_ID_Smurf_bnlm_1_0 = 30U, + LBFF_DEVICE_ID_BNLM_3_4 = 31U, + LBFF_DEVICE_ID_odr_bnlm_1_4 = 32U, + LBFF_DEVICE_ID_BXT_Demosaic = 33U, + LBFF_DEVICE_ID_VCSC_2_0_b = 34U, + LBFF_DEVICE_ID_GLTM_2_0 = 35U, + LBFF_DEVICE_ID_ifd_segmap_xnr_1_4 = 36U, + LBFF_DEVICE_ID_Smurf_xnr_1_0 = 37U, + LBFF_DEVICE_ID_XNR_5_4 = 38U, + LBFF_DEVICE_ID_VCR_3_1 = 39U, + LBFF_DEVICE_ID_GLIM_2_0 = 40U, + LBFF_DEVICE_ID_ifd_segmap_acm_1_4 = 41U, + LBFF_DEVICE_ID_Smurf_acm_1_0 = 42U, + LBFF_DEVICE_ID_ACM_1_2 = 43U, + LBFF_DEVICE_ID_GammaTM_V4 = 44U, + LBFF_DEVICE_ID_CSC_1_1 = 45U, + LBFF_DEVICE_ID_B2I_DS_1_1 = 46U, + LBFF_DEVICE_ID_lbff_crop_espa_1_4 = 47U, + LBFF_DEVICE_ID_ifd_gmv_1_4 = 48U, + LBFF_DEVICE_ID_GMV_Statistics_1_1 = 49U, + LBFF_DEVICE_ID_odr_gmv_feature_1_4 = 50U, + LBFF_DEVICE_ID_odr_gmv_match_1_4 = 51U, + LBFF_DEVICE_ID_TNR_Scaler_LB_1_1 = 52U, + LBFF_DEVICE_ID_tnr_delay_vrt_ctrl = 53U, + LBFF_DEVICE_ID_ifd_tnr_sp_bc_yuv4nm1_1_4 = 54U, + LBFF_DEVICE_ID_ifd_tnr_sp_bc_rs4nm1_1_4 = 55U, + LBFF_DEVICE_ID_TNR7_IMS_1_2 = 56U, + LBFF_DEVICE_ID_ifd_segmap_tnr_bc_1_4 = 57U, + LBFF_DEVICE_ID_Smurf_tnr_bc_1_0 = 58U, + LBFF_DEVICE_ID_TNR7_BC_1_2 = 59U, + LBFF_DEVICE_ID_odr_tnr_sp_bc_rs4n_1_4 = 60U, + LBFF_DEVICE_ID_TNR7_Spatial_1_1 = 61U, + LBFF_DEVICE_ID_ifd_tnr_fp_blend_yuvnm1_1_4 = 62U, + LBFF_DEVICE_ID_ifd_segmap_tnr_blend_1_4 = 63U, + LBFF_DEVICE_ID_Smurf_tnr_blend_1_0 = 64U, + LBFF_DEVICE_ID_TNR7_BLEND_1_1 = 65U, + LBFF_DEVICE_ID_odr_tnr_fp_yuvn_1_4 = 66U, + LBFF_DEVICE_ID_TNR_Scaler_FP_1_1 = 67U, + LBFF_DEVICE_ID_odr_tnr_scale_fp_yuv4n_1_4 = 68U, + LBFF_DEVICE_ID_image_upscaler_1_1 = 69U, + LBFF_DEVICE_ID_ifd_segmap_cas_1_4 = 70U, + LBFF_DEVICE_ID_Smurf_cas_1_0 = 71U, + LBFF_DEVICE_ID_CAS_1_1 = 72U, + LBFF_DEVICE_ID_ifd_bgmap_1_4 = 73U, + LBFF_DEVICE_ID_ifd_bg_yuv_1_4 = 74U, + LBFF_DEVICE_ID_bgmap_upscaler_1_1 = 75U, + LBFF_DEVICE_ID_BGB_1_0 = 76U, + LBFF_DEVICE_ID_odr_ofs_mp_1_4 = 77U, + LBFF_DEVICE_ID_B2I_DS_output_1_1 = 78U, + LBFF_DEVICE_ID_odr_ofs_dp_1_4 = 79U, + LBFF_DEVICE_ID_N = 80U, +} lbff_device_id_t; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/lbff_ids_array.h b/modules/ipu_desc/ipu8/lbff_ids_array.h new file mode 100644 index 0000000..0ac391f --- /dev/null +++ b/modules/ipu_desc/ipu8/lbff_ids_array.h @@ -0,0 +1,168 @@ +#include "ia_pal_types_isp_ids_autogen.h" + +static const char *lbff_id_to_dev[80] = { + "ifd_pipe_1_4", /* hwid=0 */ + "ifd_pipe_long_1_4", /* hwid=1 */ + "ifd_pipe_short_smth_1_4", /* hwid=2 */ + "DOL_lite_1_2", /* hwid=3 */ + "BXT_BLC", /* hwid=4 */ + "Linearization2_0", /* hwid=5 */ + "ifd_lsc_1_4", /* hwid=6 */ + "LSC_1_2", /* hwid=7 */ + "DPC_2_2", /* hwid=8 */ + "ifd_pdaf_1_4", /* hwid=9 */ + "PEXT_1_0", /* hwid=10 */ + "PAFStatistics_1_2", /* hwid=11 */ + "RGBS_Grid_1_1", /* hwid=12 */ + "CCM_3A_2_0", /* hwid=13 */ + "AEStatistics_2_1", /* hwid=14 */ + "FR_Grid_1_0", /* hwid=15 */ + "odr_awb_std_1_4", /* hwid=16 */ + "odr_awb_sat_1_4", /* hwid=17 */ + "odr_awb_sve_1_4", /* hwid=18 */ + "odr_ae_1_4", /* hwid=19 */ + "odr_af_std_1_4", /* hwid=20 */ + "odr_dpc_pdaf_1_4", /* hwid=21 */ + "odr_pdaf_1_4", /* hwid=22 */ + "", /* hwid=23 */ + "RGB_IR_2_0", /* hwid=24 */ + "odr_ir_1_4", /* hwid=25 */ + "GD_2_2", /* hwid=26 */ + "WB_1_1", /* hwid=27 */ + "odr_burst_isp_1_4", /* hwid=28 */ + "ifd_segmap_bnlm_1_4", /* hwid=29 */ + "Smurf_bnlm_1_0", /* hwid=30 */ + "BNLM_3_4", /* hwid=31 */ + "odr_bnlm_1_4", /* hwid=32 */ + "BXT_Demosaic", /* hwid=33 */ + "VCSC_2_0_b", /* hwid=34 */ + "GLTM_2_0", /* hwid=35 */ + "ifd_segmap_xnr_1_4", /* hwid=36 */ + "Smurf_xnr_1_0", /* hwid=37 */ + "XNR_5_4", /* hwid=38 */ + "VCR_3_1", /* hwid=39 */ + "GLIM_2_0", /* hwid=40 */ + "ifd_segmap_acm_1_4", /* hwid=41 */ + "Smurf_acm_1_0", /* hwid=42 */ + "ACM_1_2", /* hwid=43 */ + "GammaTM_V4", /* hwid=44 */ + "CSC_1_1", /* hwid=45 */ + "B2I_DS_1_1", /* hwid=46 */ + "lbff_crop_espa_1_4", /* hwid=47 */ + "ifd_gmv_1_4", /* hwid=48 */ + "GMV_Statistics_1_1", /* hwid=49 */ + "odr_gmv_feature_1_4", /* hwid=50 */ + "odr_gmv_match_1_4", /* hwid=51 */ + "TNR_Scaler_LB_1_1", /* hwid=52 */ + "", /* hwid=53 */ + "ifd_tnr_sp_bc_yuv4nm1_1_4", /* hwid=54 */ + "ifd_tnr_sp_bc_rs4nm1_1_4", /* hwid=55 */ + "TNR7_IMS_1_2", /* hwid=56 */ + "ifd_segmap_tnr_bc_1_4", /* hwid=57 */ + "Smurf_tnr_bc_1_0", /* hwid=58 */ + "TNR7_BC_1_2", /* hwid=59 */ + "odr_tnr_sp_bc_rs4n_1_4", /* hwid=60 */ + "TNR7_Spatial_1_1", /* hwid=61 */ + "ifd_tnr_fp_blend_yuvnm1_1_4", /* hwid=62 */ + "ifd_segmap_tnr_blend_1_4", /* hwid=63 */ + "Smurf_tnr_blend_1_0", /* hwid=64 */ + "TNR7_BLEND_1_1", /* hwid=65 */ + "odr_tnr_fp_yuvn_1_4", /* hwid=66 */ + "TNR_Scaler_FP_1_1", /* hwid=67 */ + "odr_tnr_scale_fp_yuv4n_1_4", /* hwid=68 */ + "image_upscaler_1_1", /* hwid=69 */ + "ifd_segmap_cas_1_4", /* hwid=70 */ + "Smurf_cas_1_0", /* hwid=71 */ + "CAS_1_1", /* hwid=72 */ + "ifd_bgmap_1_4", /* hwid=73 */ + "ifd_bg_yuv_1_4", /* hwid=74 */ + "bgmap_upscaler_1_1", /* hwid=75 */ + "BGB_1_0", /* hwid=76 */ + "odr_ofs_mp_1_4", /* hwid=77 */ + "B2I_DS_output_1_1", /* hwid=78 */ + "odr_ofs_dp_1_4" /* hwid=79 */ +}; + +static int lbff_id_to_uuid_tag[80] = { + ia_pal_uuid_isp_ifd_pipe_1_4, /* hwid=0 */ + ia_pal_uuid_isp_ifd_pipe_long_1_4, /* hwid=1 */ + ia_pal_uuid_isp_ifd_pipe_short_smth_1_4, /* hwid=2 */ + ia_pal_uuid_isp_dol_lite_1_2, /* hwid=3 */ + ia_pal_uuid_isp_bxt_blc, /* hwid=4 */ + ia_pal_uuid_isp_linearization2_0, /* hwid=5 */ + ia_pal_uuid_isp_ifd_lsc_1_4, /* hwid=6 */ + ia_pal_uuid_isp_lsc_1_2, /* hwid=7 */ + ia_pal_uuid_isp_dpc_2_2, /* hwid=8 */ + ia_pal_uuid_isp_ifd_pdaf_1_4, /* hwid=9 */ + ia_pal_uuid_isp_pext_1_0, /* hwid=10 */ + ia_pal_uuid_isp_pafstatistics_1_2, /* hwid=11 */ + ia_pal_uuid_isp_rgbs_grid_1_1, /* hwid=12 */ + ia_pal_uuid_isp_ccm_3a_2_0, /* hwid=13 */ + ia_pal_uuid_isp_aestatistics_2_1, /* hwid=14 */ + ia_pal_uuid_isp_fr_grid_1_0, /* hwid=15 */ + ia_pal_uuid_isp_odr_awb_std_1_4, /* hwid=16 */ + ia_pal_uuid_isp_odr_awb_sat_1_4, /* hwid=17 */ + ia_pal_uuid_isp_odr_awb_sve_1_4, /* hwid=18 */ + ia_pal_uuid_isp_odr_ae_1_4, /* hwid=19 */ + ia_pal_uuid_isp_odr_af_std_1_4, /* hwid=20 */ + ia_pal_uuid_isp_odr_dpc_pdaf_1_4, /* hwid=21 */ + ia_pal_uuid_isp_odr_pdaf_1_4, /* hwid=22 */ + 0, /* hwid=23 */ + ia_pal_uuid_isp_rgb_ir_2_0, /* hwid=24 */ + ia_pal_uuid_isp_odr_ir_1_4, /* hwid=25 */ + ia_pal_uuid_isp_gd_2_2, /* hwid=26 */ + ia_pal_uuid_isp_wb_1_1, /* hwid=27 */ + ia_pal_uuid_isp_odr_burst_isp_1_4, /* hwid=28 */ + ia_pal_uuid_isp_ifd_segmap_bnlm_1_4, /* hwid=29 */ + ia_pal_uuid_isp_smurf_bnlm_1_0, /* hwid=30 */ + ia_pal_uuid_isp_bnlm_3_4, /* hwid=31 */ + ia_pal_uuid_isp_odr_bnlm_1_4, /* hwid=32 */ + ia_pal_uuid_isp_bxt_demosaic, /* hwid=33 */ + ia_pal_uuid_isp_vcsc_2_0_b, /* hwid=34 */ + ia_pal_uuid_isp_gltm_2_0, /* hwid=35 */ + ia_pal_uuid_isp_ifd_segmap_xnr_1_4, /* hwid=36 */ + ia_pal_uuid_isp_smurf_xnr_1_0, /* hwid=37 */ + ia_pal_uuid_isp_xnr_5_4, /* hwid=38 */ + ia_pal_uuid_isp_vcr_3_1, /* hwid=39 */ + ia_pal_uuid_isp_glim_2_0, /* hwid=40 */ + ia_pal_uuid_isp_ifd_segmap_acm_1_4, /* hwid=41 */ + ia_pal_uuid_isp_smurf_acm_1_0, /* hwid=42 */ + ia_pal_uuid_isp_acm_1_2, /* hwid=43 */ + ia_pal_uuid_isp_gammatm_v4, /* hwid=44 */ + ia_pal_uuid_isp_csc_1_1, /* hwid=45 */ + ia_pal_uuid_isp_b2i_ds_1_1, /* hwid=46 */ + ia_pal_uuid_isp_lbff_crop_espa_1_4, /* hwid=47 */ + ia_pal_uuid_isp_ifd_gmv_1_4, /* hwid=48 */ + ia_pal_uuid_isp_gmv_statistics_1_1, /* hwid=49 */ + ia_pal_uuid_isp_odr_gmv_feature_1_4, /* hwid=50 */ + ia_pal_uuid_isp_odr_gmv_match_1_4, /* hwid=51 */ + ia_pal_uuid_isp_tnr_scaler_lb_1_1, /* hwid=52 */ + 0, /* hwid=53 */ + ia_pal_uuid_isp_ifd_tnr_sp_bc_yuv4nm1_1_4, /* hwid=54 */ + ia_pal_uuid_isp_ifd_tnr_sp_bc_rs4nm1_1_4, /* hwid=55 */ + ia_pal_uuid_isp_tnr7_ims_1_2, /* hwid=56 */ + ia_pal_uuid_isp_ifd_segmap_tnr_bc_1_4, /* hwid=57 */ + ia_pal_uuid_isp_smurf_tnr_bc_1_0, /* hwid=58 */ + ia_pal_uuid_isp_tnr7_bc_1_2, /* hwid=59 */ + ia_pal_uuid_isp_odr_tnr_sp_bc_rs4n_1_4, /* hwid=60 */ + ia_pal_uuid_isp_tnr7_spatial_1_1, /* hwid=61 */ + ia_pal_uuid_isp_ifd_tnr_fp_blend_yuvnm1_1_4, /* hwid=62 */ + ia_pal_uuid_isp_ifd_segmap_tnr_blend_1_4, /* hwid=63 */ + ia_pal_uuid_isp_smurf_tnr_blend_1_0, /* hwid=64 */ + ia_pal_uuid_isp_tnr7_blend_1_1, /* hwid=65 */ + ia_pal_uuid_isp_odr_tnr_fp_yuvn_1_4, /* hwid=66 */ + ia_pal_uuid_isp_tnr_scaler_fp_1_1, /* hwid=67 */ + ia_pal_uuid_isp_odr_tnr_scale_fp_yuv4n_1_4, /* hwid=68 */ + ia_pal_uuid_isp_image_upscaler_1_1, /* hwid=69 */ + ia_pal_uuid_isp_ifd_segmap_cas_1_4, /* hwid=70 */ + ia_pal_uuid_isp_smurf_cas_1_0, /* hwid=71 */ + ia_pal_uuid_isp_cas_1_1, /* hwid=72 */ + ia_pal_uuid_isp_ifd_bgmap_1_4, /* hwid=73 */ + ia_pal_uuid_isp_ifd_bg_yuv_1_4, /* hwid=74 */ + ia_pal_uuid_isp_bgmap_upscaler_1_1, /* hwid=75 */ + ia_pal_uuid_isp_bgb_1_0, /* hwid=76 */ + ia_pal_uuid_isp_odr_ofs_mp_1_4, /* hwid=77 */ + ia_pal_uuid_isp_b2i_ds_output_1_1, /* hwid=78 */ + ia_pal_uuid_isp_odr_ofs_dp_1_4 /* hwid=79 */ +}; + diff --git a/src/3a/AiqEngine.cpp b/src/3a/AiqEngine.cpp index a2e348f..296ae11 100644 --- a/src/3a/AiqEngine.cpp +++ b/src/3a/AiqEngine.cpp @@ -295,9 +295,6 @@ AiqEngine::AiqState AiqEngine::prepareInputParam(AiqStatistics* aiqStats, AiqRes // Update sensor info for the first-run of AIQ if (mFirstAiqRunning) { - // CRL_MODULE_S - mSensorManager->setFrameRate(aiqParams.fps); - // CRL_MODULE_E // set sensor info if needed ia_aiq_exposure_sensor_descriptor sensorDescriptor = {}; ia_aiq_frame_params frameParams = {}; diff --git a/src/3a/SensorManager.cpp b/src/3a/SensorManager.cpp index 7ab99b7..1594c16 100644 --- a/src/3a/SensorManager.cpp +++ b/src/3a/SensorManager.cpp @@ -253,12 +253,6 @@ uint32_t SensorManager::updateSensorExposure(SensorExpGroup sensorExposures, int effectSeq, applyingSeq); return static_cast(effectSeq); } -// CRL_MODULE_S -int SensorManager::setFrameRate(float fps) -{ - return mSensorHwCtrl->setFrameRate(fps); -} -// CRL_MODULE_E int SensorManager::getSensorInfo(ia_aiq_frame_params &frameParams, ia_aiq_exposure_sensor_descriptor &sensorDescriptor) { diff --git a/src/3a/SensorManager.h b/src/3a/SensorManager.h index e6549b6..6afeee4 100644 --- a/src/3a/SensorManager.h +++ b/src/3a/SensorManager.h @@ -68,9 +68,6 @@ class SensorManager { int setAWB(float r_per_g, float b_per_g); // HDR_FEATURE_E - // CRL_MODULE_S - int setFrameRate(float fps); - // CRL_MODULE_E int getCurrentExposureAppliedDelay(); uint64_t getSofTimestamp(int64_t sequence); private: diff --git a/src/core/CameraContext.h b/src/core/CameraContext.h index d7d88f4..c3f4a9d 100644 --- a/src/core/CameraContext.h +++ b/src/core/CameraContext.h @@ -24,9 +24,6 @@ #include "AiqSetting.h" #include "CameraTypes.h" #include "ParamDataType.h" -// JPEG_ENCODE_S -#include "EXIFMetaData.h" -// JPEG_ENCODE_E namespace icamera { @@ -51,30 +48,6 @@ struct IspParameters { } }; -// JPEG_ENCODE_S -struct JpegParameters { - double latitude; - double longitude; - double altitude; - char gpsProcessingMethod[MAX_NUM_GPS_PROCESSING_METHOD + 1]; - uint8_t gpsProcessingMethodSize; - int64_t gpsTimestamp; - int32_t rotation; - uint8_t jpegQuality; - uint8_t thumbQuality; - camera_resolution_t thumbSize; - float focalLength; - float aperture; - - JpegParameters() { - memset(this, 0, sizeof(*this)); - - jpegQuality = DEFAULT_JPEG_QUALITY; - thumbQuality = DEFAULT_JPEG_QUALITY; - } -}; -// JPEG_ENCODE_E - class DataContext { public: int64_t mFrameNumber; @@ -90,9 +63,6 @@ class DataContext { struct aiq_parameter_t mAiqParams; struct IspParameters mIspParams; -// JPEG_ENCODE_S - struct JpegParameters mJpegParams; -// JPEG_ENCODE_E DataContext(int cameraId); ~DataContext() {} @@ -106,9 +76,6 @@ class DataContext { zoomRegion = other.zoomRegion; mAiqParams = other.mAiqParams; mIspParams = other.mIspParams; -// JPEG_ENCODE_S - mJpegParams = other.mJpegParams; -// JPEG_ENCODE_E return *this; } diff --git a/src/core/CameraDevice.cpp b/src/core/CameraDevice.cpp index 96bac0e..33dde01 100644 --- a/src/core/CameraDevice.cpp +++ b/src/core/CameraDevice.cpp @@ -465,11 +465,6 @@ int CameraDevice::configure(stream_config_t* streamList) { CheckAndLogError(ret != OK, ret, "@%s failed to configure CSI meta device", __func__); // CSI_META_E - // CRL_MODULE_S - ret = mSensorCtrl->configure(); - CheckAndLogError(ret != OK, ret, "@%s failed to configure sensor HW", __func__); - // CRL_MODULE_E - ret = mSofSource->configure(); CheckAndLogError(ret != OK, ret, "@%s failed to configure SOF source device", __func__); diff --git a/src/core/SensorHwCtrl.cpp b/src/core/SensorHwCtrl.cpp index 65d26b7..799e02e 100644 --- a/src/core/SensorHwCtrl.cpp +++ b/src/core/SensorHwCtrl.cpp @@ -19,9 +19,6 @@ #include #include #include -// CRL_MODULE_S -#include -// CRL_MODULE_E #include "PlatformData.h" #include "SensorHwCtrl.h" @@ -35,9 +32,6 @@ namespace icamera { SensorHwCtrl::SensorHwCtrl(int cameraId, V4L2Subdevice* pixelArraySubdev, V4L2Subdevice* sensorOutputSubdev) : mPixelArraySubdev(pixelArraySubdev), - // CRL_MODULE_S - mSensorOutputSubdev(sensorOutputSubdev), - // CRL_MODULE_E mCameraId(cameraId), mHorzBlank(0), mVertBlank(0), @@ -49,21 +43,6 @@ SensorHwCtrl::SensorHwCtrl(int cameraId, V4L2Subdevice* pixelArraySubdev, mCurFll(0), mCalculatingFrameDuration(true) { LOG1(" @%s", mCameraId, __func__); - // CRL_MODULE_S - /** - * Try to call V4L2_CID_LINE_LENGTH_PIXELS, if failed, it means llp can't - * be read directly from sensor. Then calculate it with HBlank. - * fll will be in the same case. - */ - if (mPixelArraySubdev != nullptr) { - int llp = 0; - const int status = mPixelArraySubdev->GetControl(V4L2_CID_LINE_LENGTH_PIXELS, &llp); - if (status == OK) { - LOG1("%s, some sensors can get llp directly, don't calculate it", __func__); - mCalculatingFrameDuration = false; - } - } - // CRL_MODULE_E } SensorHwCtrl* SensorHwCtrl::createSensorCtrl(int cameraId) { @@ -106,12 +85,6 @@ SensorHwCtrl* SensorHwCtrl::createSensorCtrl(int cameraId) { return sensorCtrl; } -// CRL_MODULE_S -int SensorHwCtrl::configure() { - return OK; -} -// CRL_MODULE_E - int SensorHwCtrl::getActivePixelArraySize(int& width, int& height, int& pixelCode) { HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); CheckAndLogError(mPixelArraySubdev == nullptr, NO_INIT, "pixel array sub device is not set"); @@ -150,17 +123,6 @@ int SensorHwCtrl::setExposure(const vector& coarseExposures, CheckAndLogError((coarseExposures.empty() || fineExposures.empty()), BAD_VALUE, "No exposure data!"); - // CRL_MODULE_S - if (coarseExposures.size() > 1) { - if (PlatformData::getSensorExposureType(mCameraId) == SENSOR_MULTI_EXPOSURES) { - return setMultiExposures(coarseExposures, fineExposures); - } else if (PlatformData::getSensorExposureType(mCameraId) == - SENSOR_DUAL_EXPOSURES_DCG_AND_VS) { - return setDualExposuresDCGAndVS(coarseExposures, fineExposures); - } - } - // CRL_MODULE_E - LOG2("%s coarseExposure=%d fineExposure=%d", __func__, coarseExposures[0], fineExposures[0]); LOG2("SENSORCTRLINFO: exposure_value=%d", coarseExposures[0]); int status = mPixelArraySubdev->SetControl(V4L2_CID_EXPOSURE, coarseExposures[0]); @@ -169,79 +131,11 @@ int SensorHwCtrl::setExposure(const vector& coarseExposures, return OK; } -// CRL_MODULE_S -int SensorHwCtrl::setMultiExposures(const vector& coarseExposures, - const vector& fineExposures) { - int status = BAD_VALUE; - int shortExp = coarseExposures[0]; - int longExp = coarseExposures[1]; - - if (coarseExposures.size() > 2) { - LOG2("coarseExposure[0]=%d fineExposure[0]=%d", coarseExposures[0], fineExposures[0]); - // The first exposure is very short exposure if larger than 2 exposures. - status = mPixelArraySubdev->SetControl(CRL_CID_EXPOSURE_SHS2, coarseExposures[0]); - CheckAndLogError(status != OK, status, "failed to set exposure SHS2 %d.", - coarseExposures[0]); - - shortExp = coarseExposures[1]; - longExp = coarseExposures[2]; - - LOG2("SENSORCTRLINFO: exposure_long=%d", coarseExposures[2]); // long - LOG2("SENSORCTRLINFO: exposure_med=%d", coarseExposures[1]); // short - LOG2("SENSORCTRLINFO: exposure_short=%d", coarseExposures[0]); // very short - } - - LOG2("shortExp=%d longExp=%d", shortExp, longExp); - status = mPixelArraySubdev->SetControl(CRL_CID_EXPOSURE_SHS1, shortExp); - CheckAndLogError(status != OK, status, "failed to set exposure SHS1 %d.", shortExp); - - status = mPixelArraySubdev->SetControl(V4L2_CID_EXPOSURE, longExp); - CheckAndLogError(status != OK, status, "failed to set long exposure %d.", longExp); - LOG2("SENSORCTRLINFO: exposure_value=%d", longExp); - - return status; -} - -int SensorHwCtrl::setDualExposuresDCGAndVS(const vector& coarseExposures, - const vector& fineExposures) { - int status = BAD_VALUE; - int longExp = coarseExposures[1]; - - if (coarseExposures.size() > 2) { - LOG2("coarseExposure[0]=%d fineExposure[0]=%d", coarseExposures[0], fineExposures[0]); - // The first exposure is very short exposure for DCG + VS case. - status = mPixelArraySubdev->SetControl(CRL_CID_EXPOSURE_SHS1, coarseExposures[0]); - CheckAndLogError(status != OK, status, "failed to set exposure SHS1 %d.", - coarseExposures[0]); - - longExp = coarseExposures[2]; - LOG2("SENSORCTRLINFO: exposure_long=%d", coarseExposures[2]); // long - } - - status = mPixelArraySubdev->SetControl(V4L2_CID_EXPOSURE, longExp); - CheckAndLogError(status != OK, status, "failed to set long exposure %d.", longExp); - LOG2("SENSORCTRLINFO: exposure_value=%d", longExp); - - return status; -} -// CRL_MODULE_E - int SensorHwCtrl::setAnalogGains(const vector& analogGains) { HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); CheckAndLogError(mPixelArraySubdev == nullptr, NO_INIT, "pixel array sub device is not set"); CheckAndLogError(analogGains.empty(), BAD_VALUE, "No analog gain data!"); - // CRL_MODULE_S - if (analogGains.size() > 1) { - if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_CONVERSION_AG) { - return setConversionGain(analogGains); - } else if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_DIRECT_AG) { - LOG2("sensor multi conversion gain"); - return setMultiAnalogGain(analogGains); - } - } - // CRL_MODULE_E - LOG2("%s analogGain=%d", __func__, analogGains[0]); int status = mPixelArraySubdev->SetControl(V4L2_CID_ANALOGUE_GAIN, analogGains[0]); CheckAndLogError((status != 0), status, "failed to set analog gain %d.", analogGains[0]); @@ -254,26 +148,6 @@ int SensorHwCtrl::setDigitalGains(const vector& digitalGains) { CheckAndLogError(mPixelArraySubdev == nullptr, NO_INIT, "pixel array sub device is not set"); CheckAndLogError(digitalGains.empty(), BAD_VALUE, "No digital gain data!"); - // CRL_MODULE_S - if (digitalGains.size() > 1) { - if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_CONVERSION_AG) { - return setMultiDigitalGain(digitalGains); - } else if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_DIRECT_AG) { - LOG2("sensor multi conversion gain"); - return setMultiDigitalGain(digitalGains); - } - } - - if ((mWdrMode != 0) && - (PlatformData::getSensorGainType(mCameraId) == ISP_DG_AND_SENSOR_DIRECT_AG)) { - LOG2("%s: WDR mode, skip sensor DG, all digital gain is passed to ISP", __func__); - } else if (PlatformData::isUsingSensorDigitalGain(mCameraId)) { - if (mPixelArraySubdev->SetControl(V4L2_CID_GAIN, digitalGains[0]) != OK) { - LOGW("set digital gain failed"); - } - } - // CRL_MODULE_E - LOG2("%s digitalGain=%d", __func__, digitalGains[0]); int status = mPixelArraySubdev->SetControl(V4L2_CID_DIGITAL_GAIN, digitalGains[0]); CheckAndLogError((status != 0), status, "failed to set digitalGain gain %d.", digitalGains[0]); @@ -281,78 +155,6 @@ int SensorHwCtrl::setDigitalGains(const vector& digitalGains) { return OK; } -// CRL_MODULE_S -int SensorHwCtrl::setMultiDigitalGain(const vector& digitalGains) { - int status = BAD_VALUE; - int shortDg = digitalGains[0]; - int longDg = digitalGains[1]; - - if (digitalGains.size() > 2) { - LOG2("digitalGains[0]=%d", digitalGains[0]); - status = mPixelArraySubdev->SetControl(CRL_CID_DIGITAL_GAIN_VS, digitalGains[0]); - CheckAndLogError(status != OK, status, "failed to set very short DG %d.", digitalGains[0]); - - shortDg = digitalGains[1]; - longDg = digitalGains[2]; - } - - LOG2("shortDg=%d longDg=%d", shortDg, longDg); - status = mPixelArraySubdev->SetControl(CRL_CID_DIGITAL_GAIN_S, shortDg); - CheckAndLogError(status != OK, status, "failed to set short DG %d.", shortDg); - - status = mPixelArraySubdev->SetControl(V4L2_CID_GAIN, longDg); - CheckAndLogError(status != OK, status, "failed to set long DG %d.", longDg); - - return status; -} - -int SensorHwCtrl::setMultiAnalogGain(const vector& analogGains) { - int status = BAD_VALUE; - int shortAg = analogGains[0]; - int longAg = analogGains[1]; - - if (analogGains.size() > 2) { - LOG2("VS AG %d", analogGains[0]); - const int status = mPixelArraySubdev->SetControl(CRL_CID_ANALOG_GAIN_VS, analogGains[0]); - CheckAndLogError(status != OK, status, "failed to set VS AG %d", analogGains[0]); - - shortAg = analogGains[1]; - longAg = analogGains[2]; - - LOG2("SENSORCTRLINFO: gain_long=%d", analogGains[2]); // long - LOG2("SENSORCTRLINFO: gain_med=%d", analogGains[1]); // short - LOG2("SENSORCTRLINFO: gain_short=%d", analogGains[0]); // very short - } - - LOG2("shortAg=%d longAg=%d", shortAg, longAg); - status = mPixelArraySubdev->SetControl(CRL_CID_ANALOG_GAIN_S, shortAg); - CheckAndLogError(status != OK, status, "failed to set short AG %d.", shortAg); - - status = mPixelArraySubdev->SetControl(V4L2_CID_ANALOGUE_GAIN, longAg); - CheckAndLogError(status != OK, status, "failed to set long AG %d.", longAg); - - return status; -} - -int SensorHwCtrl::setConversionGain(const vector& analogGains) { - CheckAndLogError(analogGains.size() < 2, BAD_VALUE, "Gain data error!"); - - /* [0, 1] bits are long AG, [2, 3] bits are short AG, [4, 5] bits are very short AG. - [6] bit is long conversion gain, [7] bit is very short conversion gain. - Long AG: 0x0X0000XX - Short AG: 0x0000XX00 - Very Short AG: 0xX0XX0000 */ - int value = analogGains[0] | analogGains[1] | analogGains[2]; - LOG2("very short AG %d, short AG %d, long AG %d, conversion value %d", analogGains[0], - analogGains[1], analogGains[2], value); - - const int status = mPixelArraySubdev->SetControl(V4L2_CID_ANALOGUE_GAIN, value); - CheckAndLogError(status != OK, status, "failed to set AG %d", value); - - return OK; -} -// CRL_MODULE_E - int SensorHwCtrl::setLineLengthPixels(int llp) { int status = OK; LOG2("@%s, llp:%d", __func__, llp); @@ -362,10 +164,6 @@ int SensorHwCtrl::setLineLengthPixels(int llp) { if (mHorzBlank != horzBlank) { status = mPixelArraySubdev->SetControl(V4L2_CID_HBLANK, horzBlank); } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->SetControl(V4L2_CID_LINE_LENGTH_PIXELS, llp); - // CRL_MODULE_E } CheckAndLogError(status != OK, status, "failed to set llp. (%d)", status); @@ -383,10 +181,6 @@ int SensorHwCtrl::setFrameLengthLines(int fll) { if (mVertBlank != vertBlank) { status = mPixelArraySubdev->SetControl(V4L2_CID_VBLANK, vertBlank); } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->SetControl(V4L2_CID_FRAME_LENGTH_LINES, fll); - // CRL_MODULE_E } mCurFll = fll; @@ -424,13 +218,6 @@ int SensorHwCtrl::getLineLengthPixels(int& llp) { mHorzBlank = horzBlank; llp = horzBlank + mCropWidth; } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->GetControl(V4L2_CID_LINE_LENGTH_PIXELS, &llp); - if (status == OK) { - mHorzBlank = llp - mCropWidth; - } - // CRL_MODULE_E } LOG2("@%s, llp:%d", __func__, llp); @@ -449,13 +236,6 @@ int SensorHwCtrl::getFrameLengthLines(int& fll) { mVertBlank = vertBlank; fll = vertBlank + mCropHeight; } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->GetControl(V4L2_CID_FRAME_LENGTH_LINES, &fll); - if (status == OK) { - mVertBlank = fll - mCropHeight; - } - // CRL_MODULE_E } LOG2("@%s, fll:%d", __func__, fll); @@ -515,8 +295,6 @@ int SensorHwCtrl::getExposureRange(int& exposureMin, int& exposureMax, int& expo // HDR_FEATURE_S int SensorHwCtrl::setWdrMode(int mode) { HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); - CheckAndLogError(mSensorOutputSubdev == nullptr, NO_INIT, "sensor output sub device is not set"); - LOG2("%s WDR Mode=%d", __func__, mode); int ret = OK; @@ -525,7 +303,6 @@ int SensorHwCtrl::setWdrMode(int mode) { if ((PlatformData::getSensorExposureType(mCameraId) != SENSOR_RELATIVE_MULTI_EXPOSURES) && (PlatformData::getSensorExposureType(mCameraId) != SENSOR_DUAL_EXPOSURES_DCG_AND_VS)) { LOG2("%s: set WDR mode", __func__); - ret = mSensorOutputSubdev->SetControl(V4L2_CID_WDR_MODE, mode); } return ret; @@ -544,38 +321,4 @@ int SensorHwCtrl::setAWB(float r_per_g, float b_per_g) { } // HDR_FEATURE_E -// CRL_MODULE_S -int SensorHwCtrl::setFrameRate(float fps) { - HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); - CheckAndLogError(mSensorOutputSubdev == nullptr, NO_INIT, "sensor output sub device is not set"); - - struct v4l2_queryctrl query; - CLEAR(query); - query.id = V4L2_CID_LINK_FREQ; - int status = mSensorOutputSubdev->QueryControl(&query); - CheckAndLogError(status != OK, status, "Couldn't get V4L2_CID_LINK_FREQ, status:%d", status); - - LOG2("@%s, query V4L2_CID_LINK_FREQ:, default_value:%d, maximum:%d, minimum:%d, step:%d", - __func__, query.default_value, query.maximum, query.minimum, query.step); - - int mode = 0; - if (query.maximum == query.minimum) { - mode = query.default_value; - } else { - /*********************************************************************************** - * WA: This heavily depends on sensor driver implementation, need to find a graceful - * solution. - * imx185: - * When fps larger than 30, should switch to high speed mode, currently only - * 0, 1, 2 are available. 0 means 720p 30fps, 1 means 2M 30fps, and 2 means 2M 60fps. - * imx290: - * 0 and 1 available, for 30 and higher FPS. - ***********************************************************************************/ - mode = (fps > 30) ? query.maximum : (query.maximum - 1); - } - LOG2("@%s, set V4L2_CID_LINK_FREQ to %d, fps %f", __func__, mode, fps); - return mSensorOutputSubdev->SetControl(V4L2_CID_LINK_FREQ, mode); -} -// CRL_MODULE_E - } // namespace icamera diff --git a/src/core/SensorHwCtrl.h b/src/core/SensorHwCtrl.h index 1963eb3..171751f 100644 --- a/src/core/SensorHwCtrl.h +++ b/src/core/SensorHwCtrl.h @@ -32,9 +32,6 @@ class SensorHwCtrl { SensorHwCtrl(int cameraId, V4L2Subdevice* pixelArraySubdev, V4L2Subdevice* sensorOutputSubdev); virtual ~SensorHwCtrl() {} - // CRL_MODULE_S - virtual int configure(); - // CRL_MODULE_E virtual int setTestPatternMode(int32_t testPatternMode); virtual int getPixelRate(int& pixelRate); virtual int setExposure(const std::vector& coarseExposures, @@ -69,29 +66,13 @@ class SensorHwCtrl { virtual int setAWB(float r_per_g, float b_per_g); // HDR_FEATURE_E - // CRL_MODULE_S - virtual int setFrameRate(float fps); - // CRL_MODULE_E private: int setLineLengthPixels(int llp); int getLineLengthPixels(int& llp); int setFrameLengthLines(int fll); int getFrameLengthLines(int& fll); - // CRL_MODULE_S - int setMultiExposures(const std::vector& coarseExposures, - const std::vector& fineExposures); - int setDualExposuresDCGAndVS(const std::vector& coarseExposures, - const std::vector& fineExposures); - int setConversionGain(const std::vector& analogGains); - int setMultiDigitalGain(const std::vector& digitalGains); - int setMultiAnalogGain(const std::vector& analogGains); - // CRL_MODULE_E - V4L2Subdevice* mPixelArraySubdev; - // CRL_MODULE_S - V4L2Subdevice* mSensorOutputSubdev; - // CRL_MODULE_E int mCameraId; int mHorzBlank; int mVertBlank; @@ -137,9 +118,6 @@ class DummySensor : public SensorHwCtrl { // HDR_FEATURE_S virtual int setWdrMode(int mode) { return OK; } // HDR_FEATURE_E - // CRL_MODULE_S - virtual int setFrameRate(float fps) { return OK; } - // CRL_MODULE_E }; } // namespace icamera diff --git a/src/core/SwPostProcessUnit.cpp b/src/core/SwPostProcessUnit.cpp index 60ef096..60c2d83 100644 --- a/src/core/SwPostProcessUnit.cpp +++ b/src/core/SwPostProcessUnit.cpp @@ -164,25 +164,6 @@ status_t SwPostProcessUnit::configure(const stream_t& srcStream, const stream_t& processingOrder.push_back(info); } -// JPEG_ENCODE_S - // Encode - if (dstStream.format == V4L2_PIX_FMT_JPEG && - mPostProcessorCore->isPostProcessTypeSupported(POST_PROCESS_JPEG_ENCODING)) { - mPostProcessType |= POST_PROCESS_JPEG_ENCODING; - info.type = POST_PROCESS_JPEG_ENCODING; - info.inputInfo = inputStreamInfo; - info.outputInfo.width = dstStream.width; - info.outputInfo.height = dstStream.height; - info.outputInfo.stride = dstStream.width; - info.outputInfo.format = V4L2_PIX_FMT_NV12; // should get the actual format - info.outputInfo.size = - CameraUtils::getFrameSize(info.outputInfo.format, info.outputInfo.width, - info.outputInfo.height, false, false, false); - inputStreamInfo = info.outputInfo; - processingOrder.push_back(info); - } -// JPEG_ENCODE_E - if (inputStreamInfo.width != dstStream.width || inputStreamInfo.height != dstStream.height) { //inputStreamInfo.format != diff --git a/src/core/processingUnit/CBStage.cpp b/src/core/processingUnit/CBStage.cpp index 7375181..34b6c75 100644 --- a/src/core/processingUnit/CBStage.cpp +++ b/src/core/processingUnit/CBStage.cpp @@ -305,13 +305,19 @@ void CBStage::updateInfoAndSendEvents(StageTask* task) { bufferEvent.data.stageBufReady.uuid = item.first; bufferEvent.buffer = item.second; +#ifdef IPU_SYSVER_ipu8 + if (CameraDump::isDumpTypeEnable(DUMP_PSYS_OUTPUT_BUFFER) && + (mResourceId == NODE_RESOURCE_ID_LBFF)) { + CameraDump::dumpImage(mCameraId, item.second, M_PSYS, item.first); + } +#else if ((CameraDump::isDumpTypeEnable(DUMP_PSYS_OUTPUT_BUFFER) && (mResourceId == NODE_RESOURCE_ID_BBPS)) || (CameraDump::isDumpTypeEnable(DUMP_PSYS_INTERM_BUFFER) && (mResourceId == NODE_RESOURCE_ID_LBFF))) { CameraDump::dumpImage(mCameraId, item.second, M_PSYS, item.first); } - +#endif notifyListeners(bufferEvent); } if (mHasStatsTerminal) { diff --git a/src/hal/hal_adaptor/CMakeLists.txt b/src/hal/hal_adaptor/CMakeLists.txt index 9479a4f..9b645c9 100644 --- a/src/hal/hal_adaptor/CMakeLists.txt +++ b/src/hal/hal_adaptor/CMakeLists.txt @@ -69,9 +69,6 @@ target_link_libraries(hal_adaptor rt) # Install headers install(DIRECTORY ${ROOT_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcamhal) -if (SUPPORT_LIVE_TUNING) - install(FILES ${ROOT_DIR}/modules/livetune/LiveTuning.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcamhal/api) -endif() # Install libraries if (${CMAKE_VERSION} VERSION_LESS 3.11) diff --git a/src/hal/hal_adaptor/HalAdaptor.cpp b/src/hal/hal_adaptor/HalAdaptor.cpp index 25d8d0c..65c4d70 100644 --- a/src/hal/hal_adaptor/HalAdaptor.cpp +++ b/src/hal/hal_adaptor/HalAdaptor.cpp @@ -109,6 +109,8 @@ static void load_camera_hal_library() { libName += "ipu7x"; } else if (strstr(gPciId, "0xb05d") != nullptr /* PTL */) { libName += "ipu75xa"; + } else if (strstr(gPciId, "0xd719") != nullptr /* NVL */) { + libName += "ipu8"; } else if (strstr(gPciId, "0x9a19") != nullptr /* TGL */) { libName += "ipu6"; } else if (strstr(gPciId, "0x4e19") != nullptr /* JSL */) { diff --git a/src/image_process/PostProcessorBase.cpp b/src/image_process/PostProcessorBase.cpp index 8143c17..5d8639c 100644 --- a/src/image_process/PostProcessorBase.cpp +++ b/src/image_process/PostProcessorBase.cpp @@ -111,210 +111,4 @@ status_t ConvertProcess::doPostProcessing(const shared_ptr& inBuf, return OK; } -// JPEG_ENCODE_S -JpegProcess::JpegProcess(int cameraId) - : PostProcessorBase("JpegEncode"), - mCameraId(cameraId), - mCropBuf(nullptr), - mScaleBuf(nullptr), - mThumbOut(nullptr), - mExifData(nullptr) { - LOG1("@%s create jpeg encode processor", __func__); - - mProcessor = IImageProcessor::createImageProcessor(); - mJpegEncoder = IJpegEncoder::createJpegEncoder(); - mMemoryType = mJpegEncoder->getMemoryType(); - mJpegMaker = std::unique_ptr(new JpegMaker()); -} - -void JpegProcess::attachJpegBlob(const EncodePackage& package) { - LOG2("@%s, encoded data size: %d, exif data size: %d", __func__, package.encodedDataSize, - package.exifDataSize); - uint8_t* resultPtr = static_cast(package.outputData) + package.outputSize - - sizeof(struct camera3_jpeg_blob); - - // save jpeg size at the end of file - auto* blob = reinterpret_cast(resultPtr); - blob->jpeg_blob_id = CAMERA3_JPEG_BLOB_ID; - blob->jpeg_size = package.encodedDataSize + package.exifDataSize; -} - -std::shared_ptr JpegProcess::cropAndDownscaleThumbnail( - int thumbWidth, int thumbHeight, const shared_ptr& inBuf) { - LOG2("@%s, input size: %dx%d, thumbnail info: %dx%d", __func__, - inBuf->getWidth(), inBuf->getHeight(), thumbWidth, thumbHeight); - - if (thumbWidth <= 0 || thumbHeight <= 0) { - LOGW("@%s, skip, thumbWidth:%d, thumbHeight:%d", __func__, thumbWidth, thumbHeight); - return nullptr; - } - - int ret = OK; - shared_ptr tempBuffer = inBuf; - - // Do crop first if needed - if (IImageProcessor::isProcessingTypeSupported(POST_PROCESS_CROP) && - inBuf->getWidth() * thumbHeight != inBuf->getHeight() * thumbWidth) { - int width = 0, height = 0; - if (inBuf->getWidth() * thumbHeight < inBuf->getHeight() * thumbWidth) { - width = inBuf->getWidth(); - height = ALIGN(inBuf->getWidth() * thumbHeight / thumbWidth, 2); - } else { - width = ALIGN(inBuf->getHeight() * thumbWidth / thumbHeight, 2); - height = inBuf->getHeight(); - } - - if (mCropBuf && (mCropBuf->getWidth() != width || mCropBuf->getHeight() != height)) { - mCropBuf.reset(); - } - if (!mCropBuf) { - int bufSize = CameraUtils::getFrameSize(inBuf->getFormat(), width, height, - false, false, false); - mCropBuf = CameraBuffer::create(mMemoryType, bufSize, 0, inBuf->getFormat(), - width, height); - CheckAndLogError(!mCropBuf, nullptr, - "%s, Failed to allocate the internal crop buffer", __func__); - } - - LOG2("@%s, Crop the main buffer from %dx%d to %dx%d", __func__, inBuf->getWidth(), - inBuf->getHeight(), width, height); - ret = mProcessor->cropFrame(inBuf, mCropBuf); - CheckAndLogError(ret != OK, nullptr, "%s, Failed to crop the frame", __func__); - tempBuffer = mCropBuf; - } - - if (IImageProcessor::isProcessingTypeSupported(POST_PROCESS_SCALING)) { - if (mScaleBuf && - (mScaleBuf->getWidth() != thumbWidth || mScaleBuf->getHeight() != thumbHeight)) - mScaleBuf.reset(); - if (!mScaleBuf) { - int bufSize = CameraUtils::getFrameSize(inBuf->getFormat(), thumbWidth, thumbHeight, - false, false, false); - mScaleBuf = CameraBuffer::create(mMemoryType, bufSize, 0, inBuf->getFormat(), - thumbWidth, thumbHeight); - CheckAndLogError(!mScaleBuf, nullptr, - "%s, Failed to allocate the internal crop buffer", __func__); - } - - LOG2("@%s, Scale the buffer from %dx%d to %dx%d", __func__, inBuf->getWidth(), - inBuf->getHeight(), thumbWidth, thumbHeight); - ret = mProcessor->scaleFrame(tempBuffer, mScaleBuf); - CheckAndLogError(ret != OK, nullptr, "%s, Failed to crop the frame", __func__); - tempBuffer = mScaleBuf; - } - - if (tempBuffer->getWidth() != thumbWidth || tempBuffer->getHeight() != thumbHeight) { - LOGE("%s, Failed to crop & downscale the main buffer to thumbnail buffer", __func__); - return nullptr; - } - - return tempBuffer; -} - -void JpegProcess::fillEncodeInfo(const shared_ptr& inBuf, - const shared_ptr& outBuf, - EncodePackage& package) { - package.inputWidth = inBuf->getWidth(); - package.inputHeight = inBuf->getHeight(); - package.inputStride = inBuf->getStride(); - package.inputFormat = inBuf->getFormat(); - package.inputSize = inBuf->getBufferSize(); - - if (inBuf->getMemory() == V4L2_MEMORY_DMABUF && outBuf->getMemory() == V4L2_MEMORY_DMABUF) { - camera_buffer_t* uInBuf = inBuf->getUserBuffer(); - package.inputBufferHandle = &(uInBuf->privateHandle); - - camera_buffer_t* uOutBuf = outBuf->getUserBuffer(); - package.outputBufferHandle = &(uOutBuf->privateHandle); - } - - package.inputData = inBuf->getBufferAddr(); - package.outputData = outBuf->getBufferAddr(); - - package.outputWidth = outBuf->getWidth(); - package.outputHeight = outBuf->getHeight(); - package.outputSize = outBuf->getBufferSize(); -} - -status_t JpegProcess::doPostProcessing(const shared_ptr& inBuf, - shared_ptr& outBuf) { - PERF_CAMERA_ATRACE_PARAM1(mName.c_str(), 0); - LOG1("@%s processor name: %s", __func__, mName.c_str()); - - bool isEncoded = false; - - icamera::ExifMetaData exifMetadata; - status_t status = mJpegMaker->setupExifWithMetaData(inBuf->getWidth(), inBuf->getHeight(), - inBuf->getSequence(), TIMEVAL2NSECS(inBuf->getTimestamp()),mCameraId, - &exifMetadata); - CheckAndLogError(status != OK, UNKNOWN_ERROR, "@%s, Setup exif metadata failed.", __func__); - LOG2("@%s: setting exif metadata done!", __func__); - - std::shared_ptr thumbInput = cropAndDownscaleThumbnail( - exifMetadata.mJpegSetting.thumbWidth, exifMetadata.mJpegSetting.thumbHeight, inBuf); - - EncodePackage thumbnailPackage; - if (thumbInput) { - if (mThumbOut == nullptr || - mThumbOut->getWidth() != exifMetadata.mJpegSetting.thumbWidth || - mThumbOut->getHeight() != exifMetadata.mJpegSetting.thumbHeight || - mThumbOut->getFormat() != outBuf->getFormat()) { - int bufSize = CameraUtils::getFrameSize(inBuf->getFormat(), - exifMetadata.mJpegSetting.thumbWidth, - exifMetadata.mJpegSetting.thumbHeight, - false, false, false); - - mThumbOut = CameraBuffer::create(mMemoryType, bufSize, 0, V4L2_PIX_FMT_JPEG, - exifMetadata.mJpegSetting.thumbWidth, - exifMetadata.mJpegSetting.thumbHeight); - CheckAndLogError(!mThumbOut, NO_MEMORY, - "%s, Failed to allocate the internal crop buffer", __func__); - } - - // encode thumbnail image - fillEncodeInfo(thumbInput, mThumbOut, thumbnailPackage); - thumbnailPackage.quality = exifMetadata.mJpegSetting.jpegThumbnailQuality; - // the exifDataSize should be 0 for encoding thumbnail - thumbnailPackage.exifData = nullptr; - thumbnailPackage.exifDataSize = 0; - - do { - isEncoded = mJpegEncoder->doJpegEncode(&thumbnailPackage); - thumbnailPackage.quality -= 5; - } while (thumbnailPackage.encodedDataSize > THUMBNAIL_SIZE_LIMITATION && - thumbnailPackage.quality > 0); - - if (!isEncoded || thumbnailPackage.quality < 0) { - LOGW( - "Failed to generate thumbnail, isEncoded: %d, encoded thumbnail size: %d, " - "quality:%d", - isEncoded, thumbnailPackage.encodedDataSize, thumbnailPackage.quality); - } - } - - // save exif data - uint32_t exifBufSize = ENABLE_APP2_MARKER ? EXIF_SIZE_LIMITATION * 2 : EXIF_SIZE_LIMITATION; - if (mExifData == nullptr) { - mExifData = std::unique_ptr(new unsigned char[exifBufSize]); - } - uint8_t* finalExifDataPtr = static_cast(mExifData.get()); - uint32_t finalExifDataSize = 0; - status = mJpegMaker->getExif(thumbnailPackage, finalExifDataPtr, &finalExifDataSize); - CheckAndLogError(status != OK, status, "@%s, Failed to get Exif", __func__); - LOG2("%s, exifBufSize %d, finalExifDataSize %d", __func__, exifBufSize, finalExifDataSize); - - // encode main image - EncodePackage finalEncodePackage; - fillEncodeInfo(inBuf, outBuf, finalEncodePackage); - finalEncodePackage.quality = exifMetadata.mJpegSetting.jpegQuality; - finalEncodePackage.exifData = finalExifDataPtr; - finalEncodePackage.exifDataSize = finalExifDataSize; - isEncoded = mJpegEncoder->doJpegEncode(&finalEncodePackage); - CheckAndLogError(!isEncoded, UNKNOWN_ERROR, "@%s, Failed to encode main image", __func__); - mJpegMaker->writeExifData(&finalEncodePackage); - attachJpegBlob(finalEncodePackage); - - return OK; -} -// JPEG_ENCODE_E } // namespace icamera diff --git a/src/image_process/PostProcessorBase.h b/src/image_process/PostProcessorBase.h index f19833b..b6b71e0 100644 --- a/src/image_process/PostProcessorBase.h +++ b/src/image_process/PostProcessorBase.h @@ -22,11 +22,6 @@ #include "IImageProcessor.h" #include "iutils/Errors.h" #include "iutils/Utils.h" -// JPEG_ENCODE_S -#include "EXIFMetaData.h" -#include "IJpegEncoder.h" -#include "JpegMaker.h" -// JPEG_ENCODE_E namespace icamera { @@ -88,34 +83,4 @@ class ConvertProcess : public PostProcessorBase { std::shared_ptr& outBuf); }; -// JPEG_ENCODE_S -class JpegProcess : public PostProcessorBase { - public: - JpegProcess(int cameraId); - ~JpegProcess(){} - - virtual status_t doPostProcessing(const std::shared_ptr& inBuf, - std::shared_ptr& outBuf); - - private: - void attachJpegBlob(const EncodePackage& package); - - std::shared_ptr cropAndDownscaleThumbnail( - int thumbWidth, int thumbHeight, const std::shared_ptr& inBuf); - void fillEncodeInfo(const std::shared_ptr& inBuf, - const std::shared_ptr& outBuf, - EncodePackage& package); - - private: - int mCameraId; - - std::shared_ptr mCropBuf; - std::shared_ptr mScaleBuf; - std::shared_ptr mThumbOut; - - std::unique_ptr mJpegMaker; - std::unique_ptr mJpegEncoder; - std::unique_ptr mExifData; -}; -// JPEG_ENCODE_E } // namespace icamera diff --git a/src/image_process/PostProcessorCore.cpp b/src/image_process/PostProcessorCore.cpp index bc5bb37..41e1282 100644 --- a/src/image_process/PostProcessorCore.cpp +++ b/src/image_process/PostProcessorCore.cpp @@ -49,11 +49,6 @@ status_t PostProcessorCore::createProcessor() { case POST_PROCESS_CONVERT: processor = std::make_shared(); break; -// JPEG_ENCODE_S - case POST_PROCESS_JPEG_ENCODING: - processor = std::make_shared(mCameraId); - break; -// JPEG_ENCODE_E case POST_PROCESS_NONE: break; default: diff --git a/src/meson.build b/src/meson.build index 16498dd..908c004 100644 --- a/src/meson.build +++ b/src/meson.build @@ -47,12 +47,6 @@ libcamera_sources += files([ # FILE_SOURCE_S 'core/FileSource.cpp', # FILE_SOURCE_E -# PNP_DEBUG_S - 'platformdata/PnpDebugControl.cpp', - 'core/processingUnit/PipeManagerStub.cpp', - 'iutils/SwImageConverter.cpp', - 'core/MockPSysDevice.cpp', -# PNP_DEBUG_E 'iutils/CameraDump.cpp', 'iutils/CameraLog.cpp', 'iutils/PerfettoTrace.cpp', @@ -92,26 +86,3 @@ includes += include_directories( '3a/intel3a', '3a', ) -# POST_PROCESS_FEATURE_S -if get_option('android_platform').contains('cros') - libcamera_sources += files([ - 'core/processingUnit/PostProcessStage.cpp', - 'core/SwPostProcessUnit.cpp', - 'image_process/sw/ImageConverter.cpp', - 'image_process/sw/ImageScalerCore.cpp', - 'image_process/PostProcessorBase.cpp', - 'image_process/PostProcessorCore.cpp', -# GPU_GLES_PROCESSOR_S - 'image_process/gpu/GPUPostProcessor.cpp', -# GPU_GLES_PROCESSOR_E - 'image_process/chrome/ImageProcessorCore.cpp', - ]) - - includes += include_directories( - 'image_process', - 'image_process/sw', - 'image_process/gpu', - 'image_process/chrome', - ) -endif -# POST_PROCESS_FEATURE_E diff --git a/src/metadata/CMakeLists.txt b/src/metadata/CMakeLists.txt index 1d759a5..c3ac24c 100644 --- a/src/metadata/CMakeLists.txt +++ b/src/metadata/CMakeLists.txt @@ -22,7 +22,7 @@ set(METADATA_SRCS CACHE INTERNAL "metadata sources" ) - set(METADATA_SRCS - ${METADATA_SRCS} - CACHE INTERNAL "metadata sources" - ) +set(METADATA_SRCS + ${METADATA_SRCS} + CACHE INTERNAL "metadata sources" + ) diff --git a/src/platformdata/CMakeLists.txt b/src/platformdata/CMakeLists.txt index 39b624e..40df9ab 100644 --- a/src/platformdata/CMakeLists.txt +++ b/src/platformdata/CMakeLists.txt @@ -29,12 +29,12 @@ set(PLATFORMDATA_SRCS ${PLATFORMDATA_SRCS} ) # IPU7_SOURCE_FILE_E - set(PLATFORMDATA_SRCS - ${PLATFORMDATA_SRCS} - ${PLATFORMDATA_DIR}/AiqInitData.cpp - ${PLATFORMDATA_DIR}/gc/GraphUtils.cpp - ${PLATFORMDATA_DIR}/gc/GraphConfigManager.cpp - ${PLATFORMDATA_DIR}/gc/GraphConfig.cpp - CACHE INTERNAL "platformdata sources" - ) +set(PLATFORMDATA_SRCS + ${PLATFORMDATA_SRCS} + ${PLATFORMDATA_DIR}/AiqInitData.cpp + ${PLATFORMDATA_DIR}/gc/GraphUtils.cpp + ${PLATFORMDATA_DIR}/gc/GraphConfigManager.cpp + ${PLATFORMDATA_DIR}/gc/GraphConfig.cpp + CACHE INTERNAL "platformdata sources" + ) diff --git a/src/platformdata/CameraSensorsParser.cpp b/src/platformdata/CameraSensorsParser.cpp index 4212ae4..c5a4633 100644 --- a/src/platformdata/CameraSensorsParser.cpp +++ b/src/platformdata/CameraSensorsParser.cpp @@ -23,10 +23,6 @@ #include #include -// CRL_MODULE_S -#include - -// CRL_MODULE_E #include "iutils/CameraLog.h" namespace icamera { @@ -161,13 +157,6 @@ std::map ctlCmdMapTable = { // HDR_FEATURE_S {"V4L2_CID_WDR_MODE", V4L2_CID_WDR_MODE}, // HDR_FEATURE_E -// CRL_MODULE_S - {"V4L2_CID_LINE_LENGTH_PIXELS", V4L2_CID_LINE_LENGTH_PIXELS}, - {"V4L2_CID_FRAME_LENGTH_LINES", V4L2_CID_FRAME_LENGTH_LINES}, - {"CRL_CID_SENSOR_MODE", CRL_CID_SENSOR_MODE}, - {"CRL_CID_EXPOSURE_MODE", CRL_CID_EXPOSURE_MODE}, - {"CRL_CID_EXPOSURE_HDR_RATIO", CRL_CID_EXPOSURE_HDR_RATIO}, -// CRL_MODULE_E }; void CameraSensorsParser::parseMediaCtlControlObject(const Json::Value& node, MediaCtlConf* conf) { for (Json::Value::ArrayIndex i = 0; i < node.size(); ++i) { diff --git a/src/platformdata/gc/GraphConfig.cpp b/src/platformdata/gc/GraphConfig.cpp index 423fb63..0ad63cf 100644 --- a/src/platformdata/gc/GraphConfig.cpp +++ b/src/platformdata/gc/GraphConfig.cpp @@ -858,6 +858,10 @@ void GraphConfig::fillConnectionConfig(const IpuGraphLink& ipuLink, int32_t term status_t GraphConfig::updateGraphSettingForPtz(const PtzInfo& cur, const PtzInfo& prev, bool* isKeyResChanged) { +#ifdef IPU_SYSVER_ipu8 + // TODO: Will implement Zoom with APP + return INVALID_OPERATION; +#else RegionOfInterest cRoi = {cur.zoomRatio, cur.x, cur.y, false}; RegionOfInterest rRoi = {prev.zoomRatio, prev.x, prev.y, false}; @@ -881,6 +885,7 @@ status_t GraphConfig::updateGraphSettingForPtz(const PtzInfo& cur, const PtzInfo dumpNodes(info); } return OK; +#endif } void GraphConfig::dumpLink(const GraphLink* link) {